Konvertieren von Daten mithilfe von Dataflowkonvertierungen
Wichtig
Diese Seite enthält Anweisungen zum Verwalten von Azure IoT Operations-Komponenten mithilfe von Kubernetes-Bereitstellungsmanifesten, die sich in der Vorschau befinden. Dieses Feature wird mit einigen Einschränkungen bereitgestellt und darf nicht für Produktionsworkloads verwendet werden.
Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
Sie können Dataflowkonvertierungen verwenden, um Daten in Azure IoT Einsatz zu transformieren. In einem Dataflow wird das Element für die Konvertierung verwendet, um Werte für Ausgabefelder zu berechnen. Sie können in Dataflowkonvertierungen Eingabefelder, verfügbare Vorgänge, Datentypen und Typkonvertierungen verwenden.
Das Dataflowelement für die Konvertierung wird verwendet, um Werte für Ausgabefelder zu berechnen:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
]
output: 'ColorProperties.*'
expression: '($1 + $2) / 2'
Für Konvertierungen sind mehrere Aspekte relevant:
- Verweis auf Eingabefelder: Verweisen auf Werte in Eingabefeldern in der Konvertierungsformel.
- Verfügbare Vorgänge: Vorgänge, die in Konvertierungen verwendet werden können. Beispiel: Addition, Subtraktion, Multiplikation und Division.
- Datentypen: Datentypen, die von einer Formel verarbeitet und bearbeitet werden können. Beispiele: ganze Zahl, Gleitkommazahl, Zeichenfolge.
- Typkonvertierungen: Wie Datentypen zwischen den Werten der Eingabefelder, der Formelauswertung und den Ausgabefeldern konvertiert werden.
Eingabefelder
In Konvertierungen können Formeln statische Werte wie die Zahl 25 oder Parameter verarbeiten, die von Eingabefeldern abgeleitet wurden. Eine Zuordnung definiert diese Eingabefelder, auf die die Formel zugreifen kann. Auf jedes Feld wird gemäß seiner Reihenfolge in der Eingabeliste verwiesen:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
'*.Mid.Avg' // - $3
'*.Mid.Mean' // - $4
]
output: 'ColorProperties.*'
expression: '($1, $2, $3, $4)'
In diesem Beispiel führt die Konvertierung zu einem Array, das die Werte von [Max, Min, Mid.Avg, Mid.Mean]
enthält. Die Kommentare in der YAML-Datei (# - $1
, # - $2
) sind optional, sie veranschaulichen jedoch die Verbindung zwischen den einzelnen Feldeigenschaften und deren Rolle in der Konvertierungsformel.
Datentypen
Unterschiedliche Serialisierungsformate unterstützen verschiedene Datentypen. JSON bietet beispielsweise einige Grundtypen: Zeichenfolge, Zahl, boolescher Wert und NULL. Es enthält auch Arrays dieser Grundtypen.
Wenn der Mapper eine Eingabeeigenschaft liest, wird diese in einen internen Typ konvertiert. Diese Konvertierung ist erforderlich, um die Daten im Arbeitsspeicher zu speichern, bis sie in ein Ausgabefeld geschrieben werden. Die Konvertierung in einen internen Typ erfolgt unabhängig davon, ob die Serialisierungsformate der Ein- und Ausgabe identisch sind.
Die interne Darstellung verwendet die folgenden Datentypen:
Typ | Beschreibung |
---|---|
bool |
Logischer WAHR/FALSCH-Wert. |
integer |
Als signierte ganze 128-Bit-Zahl gespeichert. |
float |
Als 64-Bit-Gleitkommazahl gespeichert. |
string |
Eine UTF-8-Zeichenfolge. |
bytes |
Binäre Daten, eine Zeichenfolge mit nicht signierten 8-Bit-Werten. |
datetime |
UTC oder Ortszeit mit Nanosekundenauflösung. |
time |
Tageszeit mit Nanosekundenauflösung. |
duration |
Dauer mit Nanosekundenauflösung. |
array |
Array mit beliebigen der zuvor aufgeführten Typen. |
map |
Vektor von Schlüssel-Wert-Paaren mit beliebigen der zuvor aufgeführten Typen. |
Eingabedatensatzfelder
Beim Lesen eines Eingabedatensatzfelds wird der zugrunde liegende Typ in eine dieser internen Typvarianten konvertiert. Die interne Darstellung ist so vielseitig, dass die meisten Eingabetypen mit minimaler oder keiner Konvertierung verarbeitet werden können.
Bei einigen Formaten werden Ersatztypen verwendet. Beispiel: JSON verfügt nicht über einen datetime
-Typ und speichert datetime
-Werte stattdessen als Zeichenfolgen, die nach ISO 8601 formatiert sind. Wenn der Mapper ein solches Feld liest, bleibt die interne Darstellung eine Zeichenfolge.
Ausgabedatensatzfelder
Der Mapper ist flexibel konzipiert und konvertiert interne Typen in Ausgabetypen, um Daten einzuschließen, die aus einem Serialisierungsformat mit einem begrenzten Typsystem stammen. Die folgenden Beispiele veranschaulichen die Konvertierungen:
- Numerische Typen: Diese Typen können in andere Darstellungen konvertiert werden, auch wenn dabei ein Genauigkeitsverlust entsteht. Beispiel: Eine 64-Bit-Gleitkommazahl (
f64
) kann in eine ganze 32-Bit-Zahl (i32
) konvertiert werden. - Zeichenfolgen in Zahlen: Wenn der eingehende Datensatz eine Zeichenfolge wie
123
enthält und das Ausgabefeld eine ganze 32-Bit-Zahl ist, konvertiert der Mapper den Wert und schreibt ihn als Zahl. - Zeichenfolgen in andere Typen:
- Wenn das Ausgabefeld den Typ
datetime
aufweist, versucht der Mapper, die Zeichenfolge als einen nach ISO 8601 formatierten Typ fürdatetime
zu parsen. - Wenn das Ausgabefeld den Typ
binary/bytes
aufweist, versucht der Mapper, die Zeichenfolge aus einer Base64-codierten Zeichenfolge zu deserialisieren.
- Wenn das Ausgabefeld den Typ
- Boolesche Werte:
- Werden in
0
/1
konvertiert, wenn das Ausgabefeld numerisch ist. - Werden in
true
/false
konvertiert, wenn das Ausgabefeld eine Zeichenfolge ist.
- Werden in
Verwenden einer Konvertierungsformel mit Typen
In Zuordnungen kann eine optionale Formel angeben, wie Daten aus der Eingabe verarbeitet werden, bevor diese in das Ausgabefeld geschrieben werden. Ist keine Formel angegeben, kopiert der Mapper das Eingabefeld mithilfe der internen Typ- und Konvertierungsregeln in die Ausgabe.
Ist eine Formel angegeben, sind die für die Verwendung in Formeln verfügbaren Datentypen auf die folgenden beschränkt:
- Ganze Zahlen
- Gleitkommazahlen
- Zeichenfolgen
- Boolesche Werte
- Arrays der vorherigen Typen
- Fehlender Wert
Map
und byte
können nicht in Formeln verwendet werden.
Typen im Zusammenhang mit der Zeit (datetime
, time
und duration
) werden in ganzzahlige Werte konvertiert, die die Zeit in Sekunden darstellen. Nach der Formelauswertung werden die Ergebnisse in der internen Darstellung gespeichert und nicht erneut konvertiert. Beispiel: datetime
bleibt nach der Konvertierung in Sekunden eine ganze Zahl. Wenn der Wert in datetime
-Feldern verwendet werden soll, muss eine explizite Konvertierungsmethode angewendet werden. Beispiel: Der Wert wird in eine Zeichenfolge gemäß ISO 8601 konvertiert, die automatisch in den Typ datetime
des Serialisierungsformats für die Ausgabe konvertiert wird.
Verwenden unregelmäßiger Typen
Besondere Überlegungen gelten für Typen wie Arrays und fehlender Wert.
Arrays
Arrays können mithilfe von Aggregationsfunktionen verarbeitet werden, um einen einzelnen Wert aus mehreren Elementen zu berechnen. Beispielsweise mit dem Eingabedatensatz:
{
"Measurements": [2.34, 12.3, 32.4]
}
Mit der Zuordnung:
inputs: [
'Measurements' // - $1
]
output: 'Measurement'
expression: 'min($1)'
Bei dieser Konfiguration wird der kleinste Wert aus dem Array Measurements
für das Ausgabefeld ausgewählt.
Arrays können zudem aus mehreren einzelnen Werten erstellt werden:
inputs: [
'minimum' // - - $1
'maximum' // - - $2
'average' // - - $3
'mean' // - - $4
]
output: 'stats'
expression: '($1, $2, $3, $4)'
Diese Zuordnung erstellt ein Array mit den Mindest-, Höchst-, Durchschnitts- und Mittelwerten.
Fehlender Wert
Bei „fehlender Wert“ handelt es sich um einen speziellen Typ, der beispielsweise in den folgenden Szenarien verwendet wird:
- Umgang mit fehlenden Feldern in der Eingabe durch Bereitstellen eines alternativen Werts
- Bedingtes Entfernen eines Felds basierend auf seiner Existenz
Beispielzuordnung mit einem fehlenden Wert:
{
"Employment": {
"Position": "Analyst",
"BaseSalary": 75000,
"WorkingHours": "Regular"
}
}
Der Eingabedatensatz enthält das Feld BaseSalary
, das jedoch möglicherweise optional ist. Angenommen, ein Wert muss aus einem Kontextualisierungsdataset hinzugefügt werden, wenn das Feld fehlt:
{
"Position": "Analyst",
"BaseSalary": 70000,
"WorkingHours": "Regular"
}
Eine Zuordnung kann überprüfen, ob das Feld im Eingabedatensatz vorhanden ist. Wenn das Feld gefunden wird, erhält die Ausgabe diesen vorhandenen Wert. Andernfalls erhält die Ausgabe den Wert aus dem context-Dataset. Zum Beispiel:
inputs: [
'BaseSalary' // - - - - - - - - - - - $1
'$context(position).BaseSalary' // - $2
]
output: 'BaseSalary'
expression: 'if($1 == (), $2, $1)'
conversion
verwendet die if
-Funktion mit drei Parametern:
- Der erste Parameter ist eine Bedingung. Im Beispiel wird überprüft, ob es sich bei dem
BaseSalary
-Feld des Eingabefelds (mit dem Alias$1
) um den fehlenden Wert handelt. - Der zweite Parameter ist das Ergebnis der Funktion, wenn die Bedingung im ersten Parameter TRUE ist. In diesem Beispiel ist er das
BaseSalary
-Feld des Kontextualisierungsdatasets (mit dem Alias$2
). - Der dritte Parameter ist der Wert für die Bedingung, wenn der erste Parameter FALSE ist.
Verfügbare Funktionen
Dataflows stellen eine Reihe integrierter Funktionen bereit, die in Konvertierungsformeln verwendet werden können. Diese Funktionen können verwendet werden, um allgemeine Vorgänge wie Arithmetik, Vergleich und Zeichenfolgenmanipulation auszuführen. Die verfügbaren Funktionen sind:
Funktion | Beschreibung | Beispiele |
---|---|---|
min |
Gibt den Minimalwert aus einem Array zurück. | min(2, 3, 1) gibt 1 zurück, min($1) gibt den Minimalwert aus dem Array $1 zurück |
max |
Gibt den Maximalwert aus einem Array zurück. | max(2, 3, 1) gibt 3 zurück, max($1) gibt den Maximalwert aus dem Array $1 zurück |
if |
Gibt Zwischenwerte basierend auf einer Bedingung zurück. | if($1 > 10, 'High', 'Low') gibt 'High' zurück, wenn $1 größer als 10 ist, andernfalls wird 'Low' zurückgegeben |
len |
Gibt die Zeichenlänge einer Zeichenfolge oder die Anzahl der Elemente in einem Tupel zurück. | len("Azure") gibt 5 zurück, len(1, 2, 3) gibt 3 zurück, len($1) gibt die Anzahl der Elemente im Array $1 zurück |
floor |
Gibt die größte ganze Zahl kleiner oder gleich einer Zahl zurück. | floor(2.9) gibt 2 zurück. |
round |
Gibt die nächste ganze Zahl zu einer Zahl zurück, und rundet die Zwischenzahlen von 0,0 weg. | round(2.5) gibt 3 zurück. |
ceil |
Gibt die kleinste ganze Zahl zurück, die größer oder gleich einer Zahl ist. | ceil(2.1) gibt 3 zurück. |
scale |
Skalieren Sie einen Wert von einem Bereich auf einen anderen. | scale($1, 0, 10, 0, 100) skaliert den Eingabewert zwischen dem Bereich 0 und 10 auf den Bereich 0 bis 100 |
Konvertierungsfunktionen
Dataflows bieten mehrere integrierte Konvertierungsfunktionen für allgemeine Einheitenumwandlungen wie Temperatur, Druck, Länge, Gewicht und Volumen. Im Folgenden finden Sie einige Beispiele:
Konvertierung | Formel | Funktionsname |
---|---|---|
Celsius in Fahrenheit | F = (C × 9⁄5) + 32 | cToF |
psi in bar | Bar = psi × 0,0689476 | psiToBar |
Zoll in cm | cm = Zoll × 2,54 | inToCm |
Fuß in Meter | Meter = Fuß × 0,3048 | ftToM |
lb in kg | kg = lb × 0,453592 | lbToKg |
Gallonen in Liter | Liter = Gallonen × 3,78541 | galToL |
Rückwärtskonvertierungen werden ebenfalls unterstützt:
Konvertierung | Formel | Funktionsname |
---|---|---|
Fahrenheit in Celsius | C = (F − 32) × 5⁄9 | fToC |
Bar in psi | psi = bar ÷ 0,0689476 | barToPsi |
cm in Zoll | Zoll = cm ÷ 2,54 | cmToIn |
Meter in Fuß | Fuß = Meter ÷ 0,3048 | mToFt |
kg in lb | lb = kg ÷ 0,453592 | kgToLb |
Liter in Gallonen | Gallonen = Liter ÷ 3,78541 | lToGal |
Darüber hinaus können Sie ihre eigenen Konvertierungsfunktionen mithilfe grundlegender mathematischer Formeln definieren. Das System unterstützt Operatoren wie Addition (+
), Subtraktion (-
), Multiplikation (*
) und Division (/
). Diese Operatoren befolgen die Standardregeln der Rangfolge, die mithilfe von Klammern angepasst werden können, um die richtige Reihenfolge der Vorgänge sicherzustellen. Auf diese Weise können Sie Einheitenkonvertierungen an bestimmte Anforderungen anpassen.
Verfügbare Operatoren nach Rangfolge
Operator | Beschreibung |
---|---|
^ | Potenzierung: $1³ |
Da Exponentiation
die höchste Priorität hat, wird dieser Vorgang zuerst ausgeführt, sofern diese Reihenfolge nicht durch Klammern außer Kraft gesetzt wird:
$1 * 2 ^ 3
wird als$1 * 8
interpretiert, weil der Teil2 ^ 3
vor der Multiplikation ausgeführt wird.- Bei
($1 * 2) ^ 3
wird die Multiplikation vor der Potenzierung verarbeitet.
Operator | Beschreibung |
---|---|
- | Negation |
! | Logisches Nicht |
Negation
und Logical not
haben hohe Priorität, wodurch sie außer bei der Potenzierung immer an ihrem unmittelbaren Nachbarn bleiben:
-$1 * 2
negiert zuerst$1
und führt dann eine Multiplikation durch.-($1 * 2)
führt eine Multiplikation durch und negiert dann das Ergebnis.
Operator | Beschreibung |
---|---|
* | Multiplikation: $1 × 10 |
/ | Division: $1 ÷ 25 (Ergebnis ist eine ganze Zahl, wenn beide Argumente ganze Zahlen sind, andernfalls eine Gleitkommazahl) |
% | Modulo: $1 % 25 |
Multiplication
, Division
und Modulo
werden bei gleicher Rangfolge von links nach rechts ausgeführt, es sei denn, die Reihenfolge wird durch Klammern geändert.
Operator | Beschreibung |
---|---|
+ | Addition für numerische Werte, Verkettung für Zeichenfolgen |
- | Subtraktion |
Addition
und Subtraction
werden im Vergleich zu den Operatoren in der vorherigen Gruppe als schwächer eingestuft:
- Bei
$1 + 2 * 3
wird$1 + 6
berechnet, da2 * 3
aufgrund der höheren Reihenfolge vonmultiplication
zuerst ausgeführt wird. ($1 + 2) * 3
priorisiertAddition
vorMultiplication
.
Operator | Beschreibung |
---|---|
< | Kleiner als |
> | Größer als |
<= | Kleiner als oder gleich |
>= | Größer als oder gleich |
== | Gleich |
!= | Ungleich |
Bei Comparisons
werden numerische und boolesche Werte sowie Zeichenfolgenwerten verarbeitet. Da sie eine niedrigere Reihenfolge als arithmetische Operatoren aufweisen, sind keine Klammern erforderlich, um Ergebnisse effektiv zu vergleichen:
$1 * 2 <= $2
entspricht($1 * 2) <= $2
.
Operator | Beschreibung |
---|---|
|| | Logisches OR |
&& | Logisches AND |
Logische Operatoren werden zur Verkettung von Bedingungen verwendet:
$1 > 100 && $2 > 200