Freigeben über


Konvertieren von Daten mithilfe von Datenflusskonvertierungen

Wichtig

Diese Seite enthält Anweisungen zum Verwalten von Azure IoT Operations-Komponenten mithilfe von Kubernetes-Bereitstellungsmanifesten, die sich in DER VORSCHAU befinden. Diese Funktion ist mit einigen Einschränkungen versehen und sollte nicht für Produktions-Workloads 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 Datenflusskonvertierungen verwenden, um Daten in Azure IoT Einsatz zu transformieren. DasKonvertierungselement in einem Datenfluss wird dazu verwendet, Werte für Ausgabefelder zu berechnen. Sie können in Datenflusskonvertierungen Eingabefelder, verfügbare Vorgänge, Datentypen und Typkonvertierungen verwenden.

Das Konvertierungselement eines Datenflusses wird verwendet, um Werte für Ausgabefelder zu berechnen:

inputs: [
  '*.Max' // - $1
  '*.Min' // - $2
]
output: 'ColorProperties.*'
expression: '($1 + $2) / 2'

Es gibt mehrere Aspekte, die Sie bei Konversionen verstehen müssen:

  • Referenz auf Eingabefelder: Wie referenziert man Werte aus Eingabefeldern in der Konversion-Formel.
  • Verfügbare Operationen: Operationen, die in Konversionen verwendet werden können. Zum Beispiel Addition, Subtraktion, Multiplikation und Division.
  • Datentypen: Datentypen, die eine Formel verarbeiten und manipulieren kann. Zum Beispiel Ganzzahl, Fließkomma und Zeichenfolge.
  • Typkonvertierungen: Wie Datentypen zwischen den Eingabefeldwerten, der Evaluierung der Formel und den Ausgabefeldern konvertiert werden.

Eingabefelder

Bei Konversionen können Formeln mit statischen Werten wie z. B. einer Zahl 25 oder mit aus Eingabefeldern abgeleiteten Parametern arbeiten. Eine Zuordnung definiert diese Eingabefelder, auf die die Formel zugreifen kann. Jedes Feld wird entsprechend seiner Reihenfolge in der Eingabeliste referenziert:

inputs: [
  '*.Max'      // - $1
  '*.Min'      // - $2
  '*.Mid.Avg'  // - $3
  '*.Mid.Mean' // - $4
]
output: 'ColorProperties.*'
expression: '($1, $2, $3, $4)'

In diesem Beispiel führt die Konversion 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, helfen aber dabei, die Verbindung zwischen jeder Feldeigenschaft und ihrer Rolle in der Konversionsformel zu verdeutlichen.

Datentypen

Verschiedene Serialisierungsformate unterstützen unterschiedliche Datentypen. JSON bietet zum Beispiel einige primitive Typen: Zeichenfolge, Zahl, boolesch und null. Es enthält auch Arrays dieser primitiven Typen.

Wenn der Mapper eine Eingabeeigenschaft liest, konvertiert er sie in einen internen Typ. Diese Konversion ist notwendig, um die Daten im Speicher zu halten, bis sie in ein Ausgabefeld geschrieben werden. Die Konversion in einen internen Typ erfolgt unabhängig davon, ob die Eingabe- und Ausgabeserialisierungsformate gleich sind.

Bei der internen Darstellung werden die folgenden Datentypen verwendet:

type BESCHREIBUNG
bool Logisch wahr/falsch.
integer Gespeichert als 128-Bit-Ganzzahl mit Vorzeichen.
float Gespeichert als 64-Bit-Gleitkommazahl.
string Eine UTF-8 Zeichenfolge.
bytes Binärdateien, eine Zeichenfolge von 8-Bit-Werten ohne Vorzeichen.
datetime UTC oder lokale Zeit mit Nanosekunden-Auflösung.
time Tageszeit mit Nanosekunden-Auflösung.
duration Eine Dauer mit Nanosekunden-Auflösung.
array Ein Array mit einem der zuvor aufgeführten Typen.
map Ein Vektor von (Schlüssel, Wert)-Paaren beliebiger, zuvor aufgeführter Typen.

Felder für Eingabedatensätze

Wenn ein Eingabedatensatz gelesen wird, wird sein zugrunde liegender Typ in eine dieser internen Typvarianten umgewandelt. Die interne Darstellung ist flexibel genug, um die meisten Eingabetypen mit minimaler oder ohne Konversion zu handhaben.

Für einige Formate werden Surrogat-Typen verwendet. JSON hat zum Beispiel keinen datetime-Typ und speichert stattdessen datetime-Werte als Zeichenfolgen, die gemäß ISO8601 formatiert sind. Wenn der Mapper ein solches Feld liest, bleibt die interne Darstellung eine Zeichenfolge.

Felder für Ausgabedatensätze

Der Mapper ist so konzipiert, dass er flexibel ist, indem er interne Typen in Ausgabetypen konvertiert, um Szenarien zu ermöglichen, in denen Daten aus einem Serialisierungsformat mit einem begrenzten Typsystem stammen. Die folgenden Beispiele zeigen, wie Konversionen gehandhabt werden:

  • Numerische Typen: Diese Typen können in andere Darstellungen konvertiert werden, auch wenn dies einen Verlust an Präzision bedeutet. Zum Beispiel kann eine 64-Bit-Gleitkommazahl (f64) in eine 32-Bit-Ganzzahl (i32) umgewandelt werden.
  • Zeichenfolgen in Zahlen: Wenn der Eingangsdatensatz eine Zeichenfolge wie 123 enthält und das Ausgabefeld eine 32-Bit Ganzzahl ist, konvertiert der Mapper den Wert und schreibt ihn als Zahl.
  • Zeichenfolgen in andere Typen:
    • Wenn das Ausgabefeld datetime ist, versucht der Mapper, die Zeichenfolge als ISO8601-formatiertes datetime zu parsen.
    • Wenn das Ausgabefeld binary/bytes ist, versucht der Mapper, die Zeichenfolge aus einer base64-kodierten Zeichenfolge zu deserialisieren.
  • Boolesche Werte:
    • Wird in 0/1 umgewandelt, wenn das Ausgabefeld numerisch ist.
    • Konvertiert in true/false, wenn das Ausgabefeld eine Zeichenfolge ist.

Verwenden Sie eine Konvertierungsformel mit Typen

In Zuordnungen kann eine optionale Formel angeben, wie die Daten aus der Eingabe verarbeitet werden, bevor sie in das Ausgabefeld geschrieben werden. Wenn keine Formel angegeben wird, kopiert der Mapper das Eingabefeld in die Ausgabe, indem er die internen Typ- und Konvertierungsregeln verwendet.

Wenn eine Formel angegeben wird, sind die Datentypen, die für die Verwendung in Formeln zur Verfügung stehen, auf folgende beschränkt:

  • Ganze Zahlen
  • Gleitkommazahlen
  • Zeichenfolgen
  • Boolesche Werte
  • Arrays der vorangehenden Typen
  • Fehlende Werte

Map und byte können nicht in Formeln verwendet werden.

Typen, die sich auf die Zeit beziehen (datetime, time und duration), werden in Ganzzahlwerte umgewandelt, die die Zeit in Sekunden darstellen. Nach der Evaluierung der Formel werden die Ergebnisse in der internen Darstellung gespeichert und nicht zurück konvertiert. Zum Beispiel bleibt datetime, umgewandelt in Sekunden, eine Ganzzahl. Wenn der Wert in datetime-Feldern verwendet werden soll, muss eine explizite Konvertierungsmethode angewendet werden. Ein Beispiel ist die Konvertierung des Wertes in eine ISO8601 Zeichenfolge, die automatisch in den Typ datetime des Ausgabeserialisierungsformats konvertiert wird.

Unregelmäßige Typen verwenden

Besondere Überlegungen gelten für Typen wie Arrays und fehlende Werte.

Arrays

Arrays können mit Hilfe von Aggregationsfunktionen verarbeitet werden, um einen einzelnen Wert aus mehreren Elementen zu berechnen. Zum Beispiel, indem Sie den Datensatz verwenden:

{
  "Measurements": [2.34, 12.3, 32.4]
}

Mit der Zuordnung:

inputs: [
  'Measurements' // - $1
]
output: 'Measurement'
expression: 'min($1)'

Diese Konfiguration wählt den kleinsten Wert aus dem Measurements-Array für das Ausgabefeld aus.

Arrays können auch aus mehreren Einzelwerten erstellt werden:

inputs: [
  'minimum' // - - $1
  'maximum' // - - $2
  'average' // - - $3
  'mean'    // - - $4
]
output: 'stats'
expression: '($1, $2, $3, $4)'

Diese Zuordnung erstellt ein Array, das das Minimum, das Maximum, den Durchschnitt und den Mittelwert enthält.

Fehlende Werte

Ein fehlender Wert ist ein spezieller Typ, der in Szenarien wie z. B.:

  • Behandeln von fehlenden Feldern in der Eingabe durch Bereitstellung eines alternativen Wertes.
  • Bedingtes Entfernen eines Feldes auf der Grundlage seines Vorhandenseins.

Beispiel einer Zuordnung, die einen fehlenden Wert verwendet:

{
  "Employment": {      
    "Position": "Analyst",
    "BaseSalary": 75000,
    "WorkingHours": "Regular"
  }
}

Der Datensatz enthält das Feld BaseSalary, aber möglicherweise ist es optional. Angenommen, das Feld fehlt, muss ein Wert aus einem Dataset zur Kontextualisierung hinzugefügt werden:

{
  "Position": "Analyst",
  "BaseSalary": 70000,
  "WorkingHours": "Regular"
}

Eine Zuordnung kann prü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 Kontext-Dataset. Beispiel:

inputs: [
  'BaseSalary' // - - - - - - - - - - - $1
  '$context(position).BaseSalary' //  - $2
]
output: 'BaseSalary'
expression: 'if($1 == (), $2, $1)'

Die conversion verwendet die if-Funktion, die drei Parameter hat:

  • Der erste Parameter ist eine Bedingung. In diesem Beispiel wird geprüft, ob das Feld BaseSalary des Eingabefeldes (alias $1) der fehlende Wert ist.
  • Der zweite Parameter ist das Ergebnis der Funktion, wenn die Bedingung im ersten Parameter wahr ist. In diesem Beispiel ist es das Feld BaseSalary des Datasets für die Kontextualisierung (alias $2).
  • Der dritte Parameter ist der Wert für die Bedingung, wenn der erste Parameter falsch ist.

Verfügbare Funktionen

Datenflüsse 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, 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, max($1) gibt den Maximalwert aus dem Array zurück $1
if Rückgabe zwischen Werten basierend auf einer Bedingung. if($1 > 10, 'High', 'Low') gibt 'High' zurück, wenn $1 größer ist als 10, andernfalls 'Low'
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 zurück $1
floor Gibt die größte Ganzzahl zurück, die kleiner oder gleich einer Zahl ist. floor(2.9) gibt 2 zurück.
round Gibt die einer Zahl am nächsten liegende Ganzzahl zurück, wobei in der Hälfte der Fälle von 0,0 abgerundet wird. round(2.5) gibt 3 zurück.
ceil Gibt die kleinste Ganzzahl zurück, die größer oder gleich einer Zahl ist. ceil(2.1) gibt 3 zurück.
scale Skaliert einen Wert von einem Bereich auf einen anderen. scale($1, 0, 10, 0, 100) skaliert den Eingabewert vom Bereich 0 bis 10 auf den Bereich 0 bis 100

Konvertierungsfunktionen

Datenflüsse bieten mehrere integrierte Konvertierungsfunktionen für die Umwandlung gewöhnlicher Einheiten wie Temperatur, Druck, Länge, Gewicht und Volumen. Im Folgenden finden Sie einige Beispiele:

Konvertierung Formel Funktionsname
Celsius zu Fahrenheit F = (C * 9/5) + 32 cToF
PSI zu Bar Bar = PSI * 0,0689476 psiToBar
Zoll zu cm Cm = Zoll * 2,54 inToCm
Fuß zu Meter Meter = Fuß * 0,3048 ftToM
Pfund zu kg Kg = Pfund * 0,453592 lbToKg
Gallonen zu Litern Liter = Gallonen * 3,78541 galToL

Umgekehrte Konversionen werden ebenfalls unterstützt:

Konvertierung Formel Funktionsname
Fahrenheit zu Celsius C = (F - 32) * 5/9 fToC
Bar zu PSI PSI = Bar / 0,0689476 barToPsi
Cm zu Zoll Inch = cm / 2,54 cmToIn
Meter zu Fuß Fuß = Meter / 0,3048 mToFt
Kg zu Pfund Pfund = kg / 0,453592 kgToLb
Liter zu Gallonen Gallonen = Liter / 3,78541 lToGal

Darüber hinaus können Sie Ihre eigenen Konversionsfunktionen mit Hilfe grundlegender mathematischer Formeln definieren. Das System unterstützt Operatoren wie Addition (+), Subtraktion (-), Multiplikation (*) und Division (/). Diese Operatoren folgen standardmäßigen Prioritätsregeln, die mit Hilfe von Klammern angepasst werden können, um die richtige Reihenfolge der Operationen zu gewährleisten. Dies bietet Ihnen die Möglichkeit, die Konversion von Einheiten an die jeweiligen Anforderungen anzupassen.

Verfügbare Operatoren nach Priorität

Bediener BESCHREIBUNG
^ Potenzierung: $1 ^ 3

Da Exponentiation die höchste Priorität hat, wird er zuerst ausgeführt, es sei denn, Klammern überschreiben diese Reihenfolge:

  • $1 * 2 ^ 3 wird als $1 * 8 interpretiert, weil das 2 ^ 3 Element zuerst ausgeführt wird, vor der Multiplikation.
  • ($1 * 2) ^ 3 verarbeitet die Multiplikation vor der Potenzierung.
Bediener BESCHREIBUNG
- Verneinung
! Logisches Nicht

Negation und Logical not haben eine hohe Priorität, so dass sie sich immer an ihren unmittelbaren Nachbarn halten, außer wenn es um Potenzierung geht:

  • -$1 * 2 negiert zuerst $1 und multipliziert dann.
  • -($1 * 2) multipliziert und negiert dann das Ergebnis.
Bediener BESCHREIBUNG
* Multiplikation: $1 * 10
/ Division: $1 / 25 (Das Ergebnis ist eine Ganzzahl, wenn beide Argumente Ganzzahlen sind, ansonsten eine Fließkommazahl)
% Modulo: $1 % 25

Multiplication, Division und Modulo, die die gleiche Priorität haben, werden von links nach rechts ausgeführt, sofern die Reihenfolge nicht durch Klammern geändert wird.

Bediener BESCHREIBUNG
+ Addition für numerische Werte, Verkettung für Zeichenfolgen
- Subtraktion

Addition und Subtraction werden als schwächere Operationen im Vergleich zu den Operationen der vorherigen Gruppe betrachtet:

  • $1 + 2 * 3 führt zu $1 + 6, weil 2 * 3 wegen der höheren Priorität von multiplication zuerst ausgeführt wird.
  • ($1 + 2) * 3 priorisiert Addition vor Multiplication.
Bediener BESCHREIBUNG
< Kleiner als
> Größer als
<= Kleiner als oder gleich
>= Größer als oder gleich
== Gleich
!= Ungleich

Comparisons operieren mit numerischen, booleschen und Zeichenfolge-Werten. Da sie eine niedrigere Priorität haben als arithmetische Operatoren, sind keine Klammern erforderlich, um die Ergebnisse effektiv zu vergleichen:

  • $1 * 2 <= $2 ist äquivalent zu ($1 * 2) <= $2.
Bediener BESCHREIBUNG
|| Logisches OR
&& Logisches AND

Logische Operatoren werden zur Verkettung von Bedingungen verwendet:

  • $1 > 100 && $2 > 200