Udostępnij za pośrednictwem


Co to jest jq w potokach procesora danych?

Ważne

Usługa Azure IoT Operations Preview — włączona przez usługę Azure Arc jest obecnie dostępna w wersji zapoznawczej. Nie należy używać tego oprogramowania w wersji zapoznawczej w środowiskach produkcyjnych.

Po udostępnieniu ogólnie dostępnej wersji należy wdrożyć nową instalację operacji usługi Azure IoT. Nie będzie można uaktualnić instalacji w wersji zapoznawczej.

Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.

jq to procesor JSON typu open source, który umożliwia korzystanie z potoków struktury i formatowania ładunków ze strukturą w potokach procesora danych:

  • Etap potoku filtru używa języka jq, aby włączyć elastyczne zapytania filtru.
  • Etap przekształcania potoku używa narzędzia jq w celu włączenia przekształcania danych.

Napiwek

jq nie jest taki sam jak jQuery i rozwiązuje inny zestaw problemów. Podczas wyszukiwania w trybie online informacji o usłudze jq wyniki wyszukiwania mogą zawierać informacje jQuery. Pamiętaj, aby zignorować lub wykluczyć informacje jQuery.

Dane jq podane na tych etapach muszą być następujące:

  • Składniowo prawidłowe.
  • Semantycznie prawidłowy dla komunikatu, do których jest stosowany kod jq.

Jak używać narzędzia jq

Istnieją dwa sposoby używania języka jq na etapach potoku procesora danych:

  • Wyrażenia korzystające z pełnej mocy języka jq, w tym możliwość wykonywania dowolnych manipulacji i obliczeń przy użyciu danych. Wyrażenia są wyświetlane na etapach potoku, takich jak filtrowanie i przekształcanie, i są określane jako wyrażenia , w których są używane.
  • Ścieżki identyfikują jedną lokalizację w komunikacie. Ścieżki używają małego podzbioru języka jq. Ścieżki służą do pobierania informacji z komunikatów i umieszczania obliczonych informacji z powrotem w komunikacie na potrzeby przetwarzania w dalszej części potoku.

Napiwek

Ten przewodnik nie zawiera pełnego obrazu funkcji jq. Aby zapoznać się z pełnym językiem , zobacz podręcznik jq.

Ze względu na wydajność procesor danych blokuje użycie następujących funkcji jq:

  • Modulemeta
  • Range
  • Recurse
  • Until
  • Walk
  • While

Rozwiązywanie problemów

Podczas tworzenia ścieżek jq lub wyrażeń w procesorze danych należy pamiętać o kilku kwestiach. Jeśli występują problemy, upewnij się, że nie popełniasz jednego z następujących błędów:

Nie określa zakresu payload

Wszystkie komunikaty w potokach procesora danych zaczynają się od struktury, która umieszcza ładunek komunikatu w polu najwyższego poziomu o nazwie payload. Chociaż nie jest to wymagane, jest to silna konwencja podczas przetwarzania komunikatów w celu zachowania głównego ładunku wewnątrz payload pola, ponieważ komunikat przechodzi przez różne etapy potoku.

Większość przypadków użycia przekształcania i filtrowania wiąże się z bezpośrednią pracą z ładunkiem, dlatego często widać całe zapytanie w zakresie pola ładunku. Możesz zapomnieć, że komunikaty używają tej struktury i traktują ładunek tak, jakby był na najwyższym poziomie.

Poprawka tego błędu jest prosta. Jeśli używasz narzędzia jq do:

  • Filtruj komunikaty, dodaj .payload | do początku wyrażenia, aby poprawnie go ograniczyć.
  • Przekształć komunikaty:
    • Jeśli nie dzielisz komunikatu, dodaj .payload |= go do początku wyrażenia, aby ograniczyć zakres przekształcenia.
    • Jeśli dzielisz komunikat, dodaj .payload = (.payload | <expression>) go <expression> , aby zaktualizować ładunek, włączając dzielenie komunikatu.

Próba połączenia wielu komunikatów

Program jq ma wiele funkcji, które umożliwiają podzielenie komunikatów i ich restrukturyzację. Jednak tylko jeden komunikat w czasie, który przechodzi do etapu potoku, może wywołać wyrażenie jq. W związku z tym nie można używać samych filtrów i przekształceń w celu łączenia danych z wielu komunikatów wejściowych.

Jeśli chcesz scalić wartości z wielu komunikatów, użyj etapu agregacji, aby najpierw połączyć wartości, a następnie użyj przekształceń lub filtrów do działania na połączonych danych.

Oddzielanie argumentów , funkcji zamiast ;

W przeciwieństwie do większości języków programowania język jq nie używa , do oddzielania argumentów funkcji. jq oddziela każdy argument funkcji za pomocą ;polecenia . Ten błąd może być trudny do debugowania, ponieważ , jest prawidłową składnią w większości miejsc, ale oznacza coś innego. W jq , oddziela wartości w strumieniu.

Najczęstszym błędem, który występuje, jeśli używasz , zamiast argumentu ; , jest skarga, że funkcja, którą próbujesz wywołać, nie istnieje dla liczby podanych argumentów. Jeśli wystąpią błędy kompilacji lub inne dziwne błędy podczas wywoływania funkcji, która nie ma sensu, upewnij się, że używasz ; zamiast , oddzielać argumenty.

Kolejność operacji

Kolejność operacji w jq może być myląca i nieintuiktywna. Operacje między znakami | są zwykle uruchamiane razem, zanim jq zastosuje |element , ale istnieją pewne wyjątki. Ogólnie rzecz biorąc, dodaj () wszystkie elementy, w których nie masz pewności co do naturalnego porządku operacji. W miarę używania języka dowiesz się, co wymaga nawiasów i czego nie ma.

Zapoznaj się z tymi artykułami, aby uzyskać pomoc w przypadku korzystania z pakietu jq: