Freigeben über


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ür datetime zu parsen.
    • Wenn das Ausgabefeld den Typ binary/bytes aufweist, versucht der Mapper, die Zeichenfolge aus einer Base64-codierten Zeichenfolge zu deserialisieren.
  • Boolesche Werte:
    • Werden in 0/1 konvertiert, wenn das Ausgabefeld numerisch ist.
    • Werden in true/false konvertiert, wenn das Ausgabefeld eine Zeichenfolge ist.

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 10ist, 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 Teil 2 ^ 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, da 2 * 3 aufgrund der höheren Reihenfolge von multiplication zuerst ausgeführt wird.
  • ($1 + 2) * 3 priorisiert Addition vor Multiplication.
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