Dela via


Vad är jq i Azure IoT Data Processor Preview-pipelines?

Viktigt!

Förhandsversion av Azure IoT Operations – aktiverad av Azure Arc finns för närvarande i FÖRHANDSVERSION. Du bör inte använda den här förhandsgranskningsprogramvaran i produktionsmiljöer.

Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

jq är en JSON-processor med öppen källkod som du kan använda omstrukturera och formatera strukturerade nyttolaster i Azure IoT Data Processor Preview)-pipelines:

  • I filterpipelinesteget används jq för att aktivera flexibla filterfrågor.
  • Transformeringspipelinesteget använder jq för att aktivera datatransformering.

Dricks

jq är inte samma sak som jQuery och löser en annan uppsättning problem. När du söker online efter information om jq kan sökresultaten innehålla information om jQuery. Se till att ignorera eller exkludera jQuery-informationen.

Den jq som du anger i dessa steg måste vara:

  • Syntaktiskt giltigt.
  • Semantiskt giltigt för meddelandet som jq tillämpas på.

Så här använder du jq

Det finns två sätt att använda jq-språket i pipelinesteg för dataprocessor:

  • Uttryck som använder jq-språkets fulla kraft, inklusive möjligheten att utföra godtyckliga manipuleringar och beräkningar med dina data. Uttryck visas i pipelinesteg som filter och transformering och kallas uttryck där de används.
  • Sökvägar identifierar en enda plats i ett meddelande. Sökvägar använder en liten delmängd av jq-språket. Du använder sökvägar för att hämta information från meddelanden och för att placera den beräknade informationen i meddelandet för bearbetning senare i en pipeline.

Dricks

Den här guiden ger inte en fullständig bild av funktionerna i jq. Den fullständiga språkreferensen finns i jq-handboken.

Av prestandaskäl blockerar dataprocessorn användningen av följande jq-funktioner:

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

Felsökning

När du skapar jq-sökvägar eller uttryck i dataprocessorn finns det få saker att tänka på. Om du stöter på problem kontrollerar du att du inte gör något av följande misstag:

Inte omfång för payload

Alla meddelanden i databehandlingspipelines börjar med en struktur som placerar nyttolasten för meddelandet i ett fält på den översta nivån med namnet payload. Även om det inte krävs är det en stark konvention när du bearbetar meddelanden för att behålla huvudnyttolasten i payload fältet när meddelandet passerar genom de olika pipelinestegen.

De flesta användningsfall för transformering och filtrering handlar om att arbeta direkt med nyttolasten, därför är det vanligt att se hela frågan som är begränsad till nyttolastfältet. Du kanske glömmer att meddelanden använder den här strukturen och behandlar nyttolasten som om den är på den översta nivån.

Korrigeringen för det här misstaget är enkel. Om du använder jq för att:

  • Filtrera meddelanden, lägg till .payload | i början av uttrycket för att omfånget ska vara korrekt.
  • Transformera meddelanden:
    • Om du inte delar upp meddelandet lägger du till .payload |= i början av uttrycket för att begränsa omvandlingen.
    • Om du delar upp meddelandet lägger du till .payload = (.payload | <expression>) runt din <expression> för att uppdatera nyttolasten specifikt samtidigt som meddelandet kan delas.

Försöker kombinera flera meddelanden

jq har många funktioner som gör att du kan dela upp meddelanden och omstrukturera dem. Men endast ett enda meddelande i taget som går in i en pipelinefas kan anropa ett jq-uttryck. Därför är det inte möjligt med enbart filter och transformeringar att kombinera data från flera indatameddelanden.

Om du vill slå samman värden från flera meddelanden använder du en aggregeringsfas för att först kombinera värdena och använder sedan transformeringar eller filter för att arbeta med de kombinerade data.

Separera funktionsargument med , i stället för ;

Till skillnad från de flesta programmeringsspråk använder , jq inte för att separera funktionsargument. jq separerar varje funktionsargument med ;. Det här misstaget kan vara svårt att felsöka eftersom , det är en giltig syntax på de flesta ställen, men betyder något annat. I jq , separerar värden i en ström.

Det vanligaste felet du ser om du använder en , i stället för ett ; är ett klagomål om att funktionen som du försöker anropa inte finns för det antal argument som angetts. Om du får kompileringsfel eller andra konstiga fel när du anropar en funktion som inte är meningsfull kontrollerar du att du använder ; i stället för , att separera argumenten.

Ordning på åtgärder

Ordningen på åtgärder i jq kan vara förvirrande och kontraintuitiv. Åtgärder mellan | tecken körs vanligtvis tillsammans innan jq tillämpar |, men det finns vissa undantag. Lägg i allmänhet till () allt där du är osäker på den naturliga driftordningen. När du använder språket mer lär du dig vad som behöver parenteser och vad som inte gör det.

Se de här artiklarna om du behöver hjälp när du använder jq: