Przekształcanie danych za pomocą mapy na wykresach przepływu danych

W Operacje Azure IoT transformacja mapy bierze każdą przychodzącą wiadomość z grafu przepływu danych i generuje komunikat wyjściowy oparty na twoich regułach. Możesz zmieniać nazwy pól, reorganizować je w nowe struktury, obliczać wartości pochodne lub usuwać niechciane pola. Korzystając z reguł dzikich, możesz kopiować wszystkie pola jednocześnie.

Aby zapoznać się z omówieniem wykresów przepływu danych i sposobem tworzenia przekształceń w potoku, zobacz Omówienie wykresów przepływu danych.

Transformacje wykorzystują język wyrażeń do obliczania wartości, warunków testowych i pól odniesienia. Wyrażenia odnoszą się do wejść według położenia, a nie nazwy: pierwsze wejście w inputs liście to $1, drugie to $2, i tak dalej. Wbudowane funkcje, takie jak cToF, konwertują i modyfikują te wartości.

Pełną listę operatorów, funkcji, typów danych i pól metadanych można znaleźć w sekcji Expressions.

Wymagania wstępne

  • Instancja usługi Operacje Azure IoT wdrożona w klastrze Kubernetes. Aby uzyskać więcej informacji, zobacz Deploy Operacje Azure IoT.
  • Domyślny punkt końcowy rejestru o nazwie default, który wskazuje na mcr.microsoft.com, jest tworzony automatycznie podczas wdrażania. Wbudowane przekształcenia używają tego punktu końcowego.

Azure CLI przykładów w tym artykule używa zmiennych środowiskowych, dzięki czemu można ustawić każdą wartość raz, a następnie skopiować i wkleić polecenia as-is. Jeśli korzystasz ze środowiska Operacje Azure IoT Codespaces z quickstartu, te zmienne są już ustawione i możesz pominąć ten krok. W przeciwnym razie ustaw następujące zmienne środowiskowe w swojej poskoczce przed uruchomieniem poleceń.

Poniższe skrypty określają najczęściej używane zmienne środowiskowe:

Zmienna środowiskowa Opis
SUBSCRIPTION_ID ID subskrypcji zawierającej Twoją instancję Operacje Azure IoT.
RESOURCE_GROUP Nazwa grupy zasobów zawierającej Twoją instancję Operacje Azure IoT.
AIO_INSTANCE_NAME Nazwa Twojej instancji Operacje Azure IoT. Aby wypisać swoje instancje, uruchom az iot ops list -o table.
CLUSTER_NAME Nazwa klastra Kubernetes z włączonym Azure Arc, który hostuje Twoją instancję.
LOCATION Region Azure do wykorzystania dla nowych zasobów, na przykład eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Wystarczy ustawić zmienne, których używa ten artykuł. W tym artykule może być użytych dodatkowych zmiennych środowiskowych do wyboru nazw zasobów. Artykuł wyjaśnia, jak ustawić je tam, gdzie są wprowadzane.

Jak działają reguły mapy

Każda reguła mapy ma cztery części:

Majątek Wymagane Opis
inputs Yes Lista ścieżek pól do odczytu z przychodzącej wiadomości.
output Yes Ścieżka pola, gdzie wynik pojawia się w wiadomości wyjściowej.
expression Nie. Formuła zastosowana do wartości wejściowych. Jeśli ją pominiesz, pierwsza wartość wejściowa kopiuje się bezpośrednio.
description Nie. Czytelna dla człowieka etykieta reguły zawarta w komunikatach o błędach.

Transformacja mapowania przypisuje zmienne pozycyjne do wejść w kolejności. Na przykład, jeśli inputs to ['Position', 'Office'], wówczas $1 ma wartość Position, a $2 ma wartość Office.

Zmienianie nazwy pola

Aby zmienić nazwę BirthDate na DateOfBirth, przyporządkuj jedno wejście do innej ścieżki wyjściowej. Nie potrzebujesz wyrażenia. Wartość jest kopiowana bez zmian.

W konfiguracji przekształcania mapy dodaj regułę:

Setting Wartość
Dane wejściowe BirthDate
Wynik DateOfBirth

Przebuduj pola

Użyj notacji kropkowej w ścieżce wyjściowej, aby przenieść pola do struktury zagnieżdżonej.

Dodaj dwie reguły:

Dane wejściowe Wynik
Name Employee.Name
BirthDate Employee.DateOfBirth

Biorąc pod uwagę te dane wejściowe:

{
  "Name": "Grace Owens",
  "BirthDate": "19840202",
  "Position": "Analyst"
}

Te dwie reguły tworzą:

{
  "Employee": {
    "Name": "Grace Owens",
    "DateOfBirth": "19840202"
  }
}

W wyniku są wyświetlane tylko pola wymienione w danych wyjściowych reguły. Wynik nie obejmuje Position pola, ponieważ żadna reguła go nie odwzorowuje.

Łączenie wielu danych wejściowych

Gdy wypisujesz wiele wejść, użyj ich zmiennych pozycyjnych, aby połączyć je w wyrażenie.

Dodawanie reguły:

Setting Wartość
Wejścia Position, Office
Wynik Employment.Position
Wyrażenie $1 + ", " + $2

Biorąc pod uwagę Position: "Analyst" i Office: "Kent, WA", wynikiem jest "Analyst, Kent, WA".

Przekształcanie wartości za pomocą wyrażeń

Użyj pola expression, aby zastosować wbudowane funkcje lub operacje arytmetyczne. Poniższy przykład wykorzystuje cToF, wbudowaną funkcję konwersji jednostkowej, która przekształca wartość Celsjusza na Fahrenheita. Pamiętaj, że odnosi się to $1 do pierwszego wejścia, a nie do nazwy pola.

Pełną listę operatorów, funkcji i zaawansowanych cech można znaleźć w sekcji Expressions. Grupy referencyjne funkcjonują według kategorii, takich jak konwersja jednostek, skalowanie i zaokrąglanie, matematyka oraz funkcje ciągów znaków.

Dodaj regułę obliczeniową. Na przykład aby przekonwertować stopnie Celsjusza na Fahrenheit:

Setting Wartość
Dane wejściowe temperature
Wynik temperature_f
Wyrażenie cToF($1)

Aby skalować odczyt czujnika do zakresu od 0 do 100, użyj wyrażenia scale($1, 0, 4095, 0, 100).

Skopiuj wszystkie pola z symbolami wieloznacznymi

Gdy dane wyjściowe powinny być dokładnie zgodne z danymi wejściowymi tylko z kilkoma zmianami, użyj reguły z symbolami wieloznacznymi, aby skopiować każde pole jednocześnie. Następnie dodaj reguły, aby zastąpić, dodać lub usunąć określone pola.

Dodaj regułę przekazywania, która kopiuje wszystkie pola. Ustaw dane wejściowe na * , a dane wyjściowe na *.

Wymagania dotyczące reguł z symbolami wieloznacznymi

  • Reguła z symbolami wieloznacznymi musi być pierwszą regułą w konfiguracji twojej mapy.
  • Transformacja mapy obsługuje tylko jedną regułę dzikiej karty.
  • Gwiazdka pasuje do co najmniej jednego segmentu ścieżki i musi reprezentować kompletny segment. Transformacja mapy nie obsługuje częściowych wzorców takich jak partial*.

Symbole wieloznaczne prefiksu

Skieruj dziką kartę do konkretnego prefiksu. Aby spłaszczyć wszystkie pola z ColorProperties do poziomu głównego:

Dodaj regułę z danymi wejściowymi ColorProperties.* i wyjściowymi *.

Dane:

{
  "ColorProperties": {
    "Hue": "blue",
    "Saturation": "90%",
    "Brightness": "50%"
  }
}

Dane wyjściowe to:

{
  "Hue": "blue",
  "Saturation": "90%",
  "Brightness": "50%"
}

Usuwanie pól z danych wyjściowych

output Ustaw wartość na pusty ciąg, aby wykluczyć określone pola. Zazwyczaj stosuje się takie podejście po zasadzie dzikiej karty: skopiuj wszystko, a potem usuń to, czego nie potrzebujesz.

  1. Dodaj regułę przekazywania, aby skopiować wszystkie pola.
  2. Dodaj regułę usuwania i wybierz pola do wykluczenia (na przykład password i internal_id).

Reguła usuwania nie może zawierać wyrażenia.

Zastępowanie symboli wieloznacznych dla określonych pól

Gdy reguła z symbolem wieloznacznym i konkretna reguła odnoszą się do tego samego pola, bardziej szczegółowa reguła ma pierwszeństwo.

  1. Dodaj regułę przekazywania, aby skopiować wszystkie pola.
  2. Dodaj regułę obliczeniową dla temperature z wyrażeniem cToF($1).

Przekształcenie mapy stosuje konkretną regułę do temperature i kopiuje wszystkie inne pola bez zmian.

Używanie pól metadanych

Czytaj i zapisuj do metadanych wiadomości, takich jak tematy MQTT i właściwości użytkownika. Zobacz Pola metadanych w odniesieniu do wyrażeń.

Dodaj regułę z danymi wejściowymi region i wyjściowymi $metadata.user_property.region , aby zapisać wartość pola we właściwości użytkownika MQTT.

Pełny przykład dynamicznego routingu tematów można znaleźć w temacie Kierowanie komunikatów do różnych tematów.

Użyj ostatniej znanej wartości i wartości domyślnych

Gdy dane czujnika docierają sporadycznie, możesz wypełnić brakujące pola ostatnią znaną wartością lub wartością statyczną. Zobacz Ostatnie znane wartości i Wartości domyślne w dokumentacji wyrażeń.

Dodaj regułę dla temperature pola i włącz ostatnią znaną wartość. Ustaw wartość 0 domyślną jako rezerwową.

Ta reguła używa bieżącej wartości, jeśli jest dostępna, w przeciwnym razie wraca do ostatniej znanej wartości i używa 0, jeśli żadna z powyższych nie jest dostępna.

Wzbogacanie przy użyciu danych zewnętrznych

Wzbogacenie jest opcjonalne. Potrzebujesz go tylko wtedy, gdy chcesz łączyć wiadomości przychodzące z danymi referencyjnymi przechowywanymi w magazynie stanów, na przykład tabelą metadanych urządzeń. Jeśli Twoje wiadomości zawierają już wszystko, czego potrzebujesz, pomiń tę sekcję.

Gdy potrzebujesz wzbogacenia, skonfiguruj zbiór danych do kontekstualizacji, który środowisko uruchomieniowe wyszukuje podczas przetwarzania. Na przykład wyszukaj metadane urządzenia według jego identyfikatora i uwzględnij je w danych wyjściowych. Aby uzyskać szczegółowe informacje, zobacz Wzbogacanie o dane zewnętrzne.

Funkcje wyłączne grafu przepływu danych

Wykresy przepływu danych obsługują kilka funkcji, które nie są dostępne w mapowaniach przepływu builtInTransformation danych.

Wartości domyślne brakujących pól

Użyj składni ?? <default> na danych wejściowych, aby zapewnić statyczne rozwiązanie zapasowe, gdy brakuje pola. Jest to prostsze niż pisanie if wyrażenia w celu sprawdzenia pustych wartości.

W konfiguracji przekształcania mapy ustaw dane wejściowe, aby zawierały składnię ??, po czym następuje wartość domyślna. Na przykład wprowadź temperature ?? 0 w polu wejściowym do użycia 0 w przypadku braku pola temperatury.

Aby uzyskać szczegółowe informacje na temat obsługiwanych typów domyślnych i łączenia wartości domyślnych z ostatnimi znanymi wartościami, zobacz Domyślne wartości w dokumentacji wyrażeń.

Funkcje wyrażeń regularnych

Wykresy przepływu danych obsługują dopasowywanie i zastępowanie wyrażeń regularnych:

  • str::regex_matches(string, pattern): zwraca wartość true, jeśli ciąg pasuje do wzorca wyrażenia regularnego.
  • str::regex_replace(string, pattern, replacement): zastępuje wszystkie dopasowania wyrażeń regularnych ciągiem zastępczym.

Te funkcje są przydatne w wyrażeniach filtrów lub do czyszczenia i przekształcania danych ciągów. Aby uzyskać pełną listę funkcji ciągów, zobacz Funkcje ciągów w dokumentacji wyrażeń.

Pełny przykład konfiguracji

Oto kompletna konfiguracja mapy, która kopiuje wszystkie pola, usuwa poufne dane, zmienia strukturę pola i oblicza wartość pochodną:

Zrzut ekranu pokazuje panel konfiguracji transformacji mapy doświadczeń operacyjnych z wieloma regułami dotyczącymi symbolu wieloznacznego, usuwania, restrukturyzacji, obliczeń i scalania.

W środowisku Operacji utwórz graf przepływu danych i dodaj transformację mapy. Na panelu konfiguracji mapy dodaj reguły do:

  1. Skopiuj wszystkie pola z przekazywaniem z symbolami wieloznacznymi.
  2. Usuń poufne pola , ustawiając dane wyjściowe na puste dla password i secret_key.
  3. Zmień strukturęBirthDate pola na Employee.DateOfBirth.
  4. Oblicz konwersję Fahrenheita, używając wzoru cToF($1) na temperature polu.
  5. Scal pola Position i Office z formułą $1 + ", " + $2.