Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In Azure IoT Einsatz nimmt eine Map-Transformation jede eingehende Nachricht in einem Datenflussgraphen und erzeugt eine Ausgabe-Nachricht basierend auf Ihren Regeln. Sie können Felder umbenennen, in neue Strukturen neu organisieren, abgeleitete Werte berechnen oder unerwünschte Felder entfernen. Mit Wildcard-Regeln kannst du alle Felder auf einmal kopieren.
Eine Übersicht über Datenflussdiagramme und die Art und Weise, wie Transformationen in einer Pipeline erstellt werden, finden Sie in der Übersicht über Datenflussdiagramme.
Transformationen verwenden eine Ausdruckssprache, um Werte, Testbedingungen und Referenzfelder zu berechnen. Ausdrücke beziehen sich auf Eingaben nach Position, nicht nach Namen: Die erste Eingabe in der inputs Liste ist $1, die zweite ist $2, und so weiter. Integrierte Funktionen wie cToF konvertieren und bearbeiten diese Werte.
Für die vollständige Liste der Operatoren, Funktionen, Datentypen und Metadatenfelder siehe die Expressions-Referenz.
Voraussetzungen
- Eine Instanz von Azure IoT Einsatz, die in einem Kubernetes-Cluster bereitgestellt wird. Weitere Informationen finden Sie unter Deploy Azure IoT Einsatz.
- Ein Standardregistrierungsendpunkt mit dem Namen
default, auf denmcr.microsoft.comverweist, wird während der Bereitstellung automatisch erstellt. Die integrierten Transformationen verwenden diesen Endpunkt.
Die Azure CLI Beispiele in diesem Artikel verwenden Umgebungsvariablen, sodass Sie jeden Wert einmal festlegen und dann die Befehle as-iskopieren und einfügen können. Wenn Sie die Azure IoT Einsatz Codespaces-Umgebung aus dem Quickstart verwenden, sind diese Variablen bereits für Sie festgelegt und Sie können diesen Schritt überspringen. Ansonsten setze die folgenden Umgebungsvariablen in deiner Shell, bevor du die Befehle ausführst.
Die folgenden Skripte legen die am häufigsten verwendeten Umweltvariablen fest:
| Umgebungsvariable | Beschreibung |
|---|---|
SUBSCRIPTION_ID |
Die ID des Abonnements, das Ihre Azure IoT Einsatz-Instanz enthält. |
RESOURCE_GROUP |
Der Name der Ressourcengruppe, die Ihre Azure IoT Einsatz-Instanz enthält. |
AIO_INSTANCE_NAME |
Der Name Ihrer Azure IoT Einsatz Instanz. Um deine Instanzen aufzulisten, führe az iot ops list -o table. |
CLUSTER_NAME |
Der Name des Azure Arc-fähigen Kubernetes-Clusters, der deine Instanz hostet. |
LOCATION |
Die Azure-Region zur Nutzung für neue Ressourcen, zum Beispiel eastus. |
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>
Du musst nur die Variablen festlegen, die dieser Artikel verwendet. Dieser Artikel könnte zusätzliche Umgebungsvariablen für die von Ihnen gewählten Ressourcennamen verwenden. Der Artikel erklärt, wie man sie dort platziert, wo sie eingeführt werden.
Funktionsweise von Kartenregeln
Jede Kartenregel weist vier Teile auf:
| Eigentum | Erforderlich | Beschreibung |
|---|---|---|
inputs |
Ja | Liste der Feldpfade, die aus der eingehenden Nachricht gelesen werden sollen. |
output |
Ja | Feldpfad, bei dem das Ergebnis in der Ausgabenachricht erscheint. |
expression |
No | Formel, die auf die Eingabewerte angewendet wurde. Wenn du ihn weglässt, wird der erste Eingabewert direkt kopiert. |
description |
No | Lesbare Bezeichnung für die Regel, die in Fehlermeldungen enthalten ist. |
Die Map-Transformation weist Positionsvariablen den Eingaben in der Reihenfolge zu. Zum Beispiel, wenn inputs['Position', 'Office'] ist, dann ist $1 der Wert von Position und $2 ist der Wert von Office.
Umbenennen eines Felds
Weisen Sie eine Eingabe einem anderen Ausgabepfad zu, um BirthDate in DateOfBirth umzubenennen. Du brauchst keinen Ausdruck. Der Wert wird unverändert kopiert.
Fügen Sie in der Kartentransformationskonfiguration eine Regel hinzu:
| Setting | Wert |
|---|---|
| Eingabe | BirthDate |
| Output | DateOfBirth |
Neustrukturieren von Feldern
Verwenden Sie die Punktnotation im Ausgabepfad, um Felder in eine geschachtelte Struktur zu verschieben.
Fügen Sie zwei Regeln hinzu:
| Eingabe | Output |
|---|---|
Name |
Employee.Name |
BirthDate |
Employee.DateOfBirth |
Aufgrund dieser Eingabe:
{
"Name": "Grace Owens",
"BirthDate": "19840202",
"Position": "Analyst"
}
Diese beiden Regeln erzeugen:
{
"Employee": {
"Name": "Grace Owens",
"DateOfBirth": "19840202"
}
}
Nur felder, die in der Ausgabe einer Regel aufgelistet sind, werden im Ergebnis angezeigt. Das Ergebnis enthält das Feld Position nicht, weil keine Regel es abbildet.
Kombinieren mehrerer Eingaben
Wenn du mehrere Eingaben auflistest, verwende ihre Positionsvariablen, um sie zu einem Ausdruck zu verschmelzen.
Fügen Sie eine Regel hinzu:
| Setting | Wert |
|---|---|
| Eingaben |
Position, Office |
| Output | Employment.Position |
| Ausdruck | $1 + ", " + $2 |
Gegeben sind Position: "Analyst" und Office: "Kent, WA", ergibt die Ausgabe "Analyst, Kent, WA".
Transformieren von Werten mit Ausdrücken
Verwenden Sie das expression Feld, um integrierte Funktionen oder Arithmetik anzuwenden. Das folgende Beispiel verwendet cToF, eine eingebaute Einheitsumrechnungsfunktion, die einen Celsiuswert in Fahrenheit umwandelt. Denk daran, dass das $1 sich auf die erste Eingabe bezieht, nicht auf einen Feldnamen.
Für die vollständige Liste der Operatoren, Funktionen und erweiterten Funktionen siehe die Expressions-Referenz. Die Referenzgruppen gruppieren Funktionen nach Kategorien, wie Einheitenumwandlung, Skalierung und Rundung, Mathematik und Zeichenkettenfunktionen .
Fügen Sie eine Berechnungsregel hinzu. Beispiel: Um Celsius in Fahrenheit umzuwandeln:
| Setting | Wert |
|---|---|
| Eingabe | temperature |
| Output | temperature_f |
| Ausdruck | cToF($1) |
Verwenden Sie den Ausdruck scale($1, 0, 4095, 0, 100), um einen Sensorwert auf einen Bereich von 0 bis 100 zu skalieren.
Alle Felder mit Platzhaltern kopieren
Wenn die Ausgabe mit nur wenigen Änderungen eng mit der Eingabe übereinstimmen soll, verwenden Sie eine Platzhalterregel, um jedes Feld gleichzeitig zu kopieren. Fügen Sie dann Regeln hinzu, um bestimmte Felder außer Kraft zu setzen, hinzuzufügen oder zu entfernen.
Fügen Sie eine Passthroughregel hinzu, die alle Felder kopiert. Legen Sie die Eingabe auf * und die Ausgabe auf *.
Anforderungen für Wildcardregel
- Eine Wildcardregel muss die erste Regel in Ihrer Kartenkonfiguration sein.
- Eine Map-Transformation unterstützt nur eine Wildcard-Regel.
- Das Sternchen entspricht einem oder mehreren Pfadsegmenten und muss ein vollständiges Segment darstellen. Die Map-Transformation unterstützt keine Teilmuster wie
partial*.
Präfix-Wildcards
Limitiere die Wildcard auf ein bestimmtes Präfix. Um alle Felder von ColorProperties auf die Stammbene zu flatten:
Fügen Sie eine Regel mit Eingabe ColorProperties.* und Ausgabe *hinzu.
Gegeben:
{
"ColorProperties": {
"Hue": "blue",
"Saturation": "90%",
"Brightness": "50%"
}
}
Die Ausgabe lautet wie folgt:
{
"Hue": "blue",
"Saturation": "90%",
"Brightness": "50%"
}
Entfernen von Feldern aus der Ausgabe
Legen Sie die output Zeichenfolge auf eine leere Zeichenfolge fest, um bestimmte Felder auszuschließen. Typischerweise nutzt man diesen Ansatz nach einer Wildcard-Regel: Alles kopieren und dann das entfernen, was man nicht braucht.
- Fügen Sie eine Passthroughregel hinzu, um alle Felder zu kopieren.
- Fügen Sie eine Regel zum Entfernen hinzu, und wählen Sie die auszuschließenden Felder aus (z. B
password. undinternal_id).
Eine Entfernungsregel kann keinen Ausdruck enthalten.
Überschreiben von Wildcards für bestimmte Felder
Wenn eine Platzhalterregel und eine bestimmte Regel beide mit demselben Feld übereinstimmen, hat die spezifischere Regel Vorrang.
- Fügen Sie eine Passthroughregel hinzu, um alle Felder zu kopieren.
- Fügen Sie eine Berechnungsregel für
temperaturemit dem AusdruckcToF($1)hinzu.
Die Kartenumwandlung wendet die spezifische Regel auf temperature an, und kopiert alle anderen Felder unverändert.
Verwenden von Metadatenfeldern
Metadaten wie MQTT-Themen und Benutzereigenschaften lesen und in Nachrichten schreiben. Siehe Metadatenfelder in der Ausdrucksreferenz.
Fügen Sie eine Regel mit Eingabe region und Ausgabe $metadata.user_property.region hinzu, um einen Feldwert in eine MQTT-Benutzereigenschaft zu schreiben.
Ein vollständiges Beispiel für das dynamische Themenrouting finden Sie unter Weiterleiten von Nachrichten zu verschiedenen Themen.
Zuletzt bekannte Werte und Standardwerte verwenden
Wenn Sensordaten zeitweise eintreffen, können Sie fehlende Felder mit dem letzten bekannten Wert oder einem statischen Standardwert ausfüllen. Siehe zuletzt bekannte Werte und Standardwerte in der Ausdrucksreferenz.
Fügen Sie eine Regel für das temperature Feld hinzu, und aktivieren Sie den zuletzt bekannten Wert. Legen Sie einen Standardwert 0 als Fallback fest.
Diese Regel verwendet den aktuellen Wert, wenn dieser vorhanden ist, und fällt auf den letzten bekannten Wert zurück. Falls keiner dieser Werte verfügbar ist, wird 0 verwendet.
Anreichern mit externen Daten
Bereicherung ist optional. Du brauchst es nur, wenn du eingehende Nachrichten mit Referenzdaten kombinieren willst, die im State Store gespeichert sind, wie z. B. einer Lookup-Tabelle der Gerätemetadaten. Wenn deine Nachrichten bereits alles enthalten, was du brauchst, überspringe diesen Abschnitt.
Wenn Sie eine Anreicherung benötigen, konfigurieren Sie einen Kontextualisierungsdatensatz, den die Laufzeit während der Verarbeitung nachschlägt. Suchen Sie beispielsweise nach den Metadaten eines Geräts anhand der ID, und fügen Sie sie in die Ausgabe ein. Ausführliche Informationen finden Sie unter "Anreichern mit externen Daten".
Exklusive Funktionen des Datenflussdiagramms
Datenflussdiagramme unterstützen mehrere Features, die in Datenflusszuordnungen builtInTransformation nicht verfügbar sind.
Standardwerte für fehlende Felder
Verwenden Sie die ?? <default> Syntax für eine Eingabe, um einen statischen Fallback bereitzustellen, wenn ein Feld fehlt. Dies ist einfacher als das Schreiben eines if Ausdrucks zum Überprüfen auf leere Werte.
In der Konfiguration der Kartentransformation muss die Eingabe so eingestellt werden, dass sie die Syntax ?? gefolgt vom Standardwert enthält. Geben Sie zum Beispiel temperature ?? 0 als Eingabefeld ein, um 0 zu verwenden, wenn das Temperaturfeld fehlt.
Ausführliche Informationen zu unterstützten Standardtypen und das Kombinieren von Standardwerten mit zuletzt bekannten Werten finden Sie unter Standardwerte in der Ausdrucksreferenz.
Regex-Funktionen
Datenflussdiagramme unterstützen das Übereinstimmen und Ersetzen regulärer Ausdrücke.
-
str::regex_matches(string, pattern): Gibt true zurück, wenn die Zeichenfolge mit dem regex-Muster übereinstimmt. -
str::regex_replace(string, pattern, replacement): Ersetzt alle regex-Übereinstimmungen durch die Ersetzungszeichenfolge.
Diese Funktionen sind nützlich bei Filterausdrücken oder zum Bereinigen und Transformieren von Zeichenfolgendaten. Eine vollständige Liste der Zeichenfolgenfunktionen finden Sie in der Ausdrucksreferenz unter " Zeichenfolgenfunktionen ".
Vollständiges Konfigurationsbeispiel
Hier ist eine vollständige Kartenkonfiguration, die alle Felder kopiert, vertrauliche Daten entfernt, ein Feld neu strukturiert und einen abgeleiteten Wert berechnet:
Erstellen Sie in der Betriebsumgebung ein Datenflussdiagramm, und fügen Sie eine Kartentransformation hinzu. Fügen Sie im Kartenkonfigurationsbereich Regeln hinzu:
- Kopieren Sie alle Felder mit einer Wildcard-Passthrough.
-
Entfernen Sie vertrauliche Felder, indem Sie die Ausgabe für
passwordundsecret_keyauf leer setzen. -
Strukturieren Sie das
BirthDateFeld inEmployee.DateOfBirth. -
Berechnen Sie eine Fahrenheit-Umrechnung mit der Formel
cToF($1)auf dem Feldtemperature. -
Zusammenführen der Felder
PositionundOfficemit der Formel$1 + ", " + $2.