Felsöka Azure Stream Analytics-frågor

Den här artikeln beskriver vanliga problem med att utveckla Azure Stream Analytics-frågor, hur du felsöker frågeproblem och hur du åtgärdar problemen. Många felsökningssteg kräver att du aktiverar resursloggar för ditt Stream Analytics-jobb. Om du inte har aktiverat resursloggar kan du läsa Felsöka Azure Stream Analytics med hjälp av resursloggar.

Query ger inte förväntat resultat

  1. Granska fel genom att testa lokalt:

    • I Azure-portalen, välj Test, under fliken Fråga. Använd hämtade exempeldata för att testa frågan. Granska eventuella fel och försök att korrigera dem.
    • Du kan också testa din sökning lokalt genom att använda Azure Stream Analytics-verktyg för Visual Studio eller Visual Studio Code.
  2. Felsöka frågor steg för steg lokalt med hjälp av jobbdiagram i Azure Stream Analytics-verktyg för Visual Studio Code. Jobbdiagrammet visar hur data flödar från inmatningskällor, till exempel Azure Event Hubs och Azure IoT Hub, genom flera frågesteg och slutligen till utdatasänkor. Skriptet mappar varje frågesteg till en tillfällig resultatmängd som du definierar med hjälp av WITH-satsen. Se data och mätvärden i varje mellanliggande resultatuppsättning för att hitta källan till problemet.

    Skärmdump av jobbdiagrammet i Visual Studio Code som visar förhandsgranskningsresultatet för ett frågesteg.

  3. Om du använder Timestamp By kontrollerar du att händelserna har tidsstämplar som är större än jobbets starttid.

  4. Eliminera vanliga fallgropar, till exempel:

    • En WHERE-klausul i frågan filtrerade bort alla händelser, så att frågan inte ger någon utdata.
    • En CAST-funktion misslyckas, vilket gör att jobbet misslyckas. Undvik fel vid typkonvertering genom att använda TRY_CAST i stället.
    • När du använder fönsterfunktioner väntar du hela fönstervaraktigheten för att se utdata från frågan.
    • Tidsstämpeln för händelserna är tidigare än jobbets starttid, så jobbet ignorerar händelserna.
    • JOIN-villkoren stämmer inte överens. Om det inte finns några träffar ger frågan inget resultat.
  5. Se till att du konfigurerar händelseordningspolicys som förväntat. Gå till Inställningar och välj Händelseordning. Testknappen tillämpar inte policyn när du testar frågan. Detta resultat är en skillnad mellan att testa i webbläsaren och att köra jobbet i produktion.

  6. Felsök med hjälp av aktivitets- och resursloggar:

Felsöka frågor progressivt

Vid realtidsdatabehandling är det bra att veta hur datan ser ut mitt i frågan. För att se mellanliggande data, använd jobbdiagrammet i Visual Studio. Om du inte har Visual Studio kan du ta extra steg för att exportera mellanliggande data.

Eftersom Azure Stream Analytics kan läsa indata eller steg i ett jobb flera gånger, kan du skriva extra SELECT INTO satser. Att göra det ger mellanliggande data till lagring och låter dig kontrollera datans korrekthet, precis som watch-variabler gör när du felsöker ett program.

Följande exempelfråga i ett Azure Stream Analytics-jobb har en indataström, två referensdataindata och utdata till Azure Table Storage. Frågan kopplar data från händelsehubben och två referensblobar för att hämta namn- och kategoriinformationen:

Skärmdump av ett exempel på en Stream Analytics-fråga som kopplar ihop en event hub-indata med två referensblobs genom att använda SELECT INTO.

Jobbet körs, men det genererar inga händelser i utdata. På panelen Övervakning, som visas här, kan du se att indata producerar data, men du vet inte vilket steg i JOIN som filtrerade bort alla händelser.

Skärmdump av Stream Analytics Monitoring-rutan som visar inmatningshändelser mottagna medan inga utdatahändelser produceras.

I denna situation kan du lägga till ytterligare några SELECT INTO satser för att "logga" de mellanliggande JOIN-resultaten och de data som läses från indata.

I detta exempel lade vi till två nya "tillfälliga utgångar." De kan vara vilken diskho du vill. Här använder vi Azure Storage som exempel:

Skärmdump av en Stream Analytics-fråga med extra SELECT INTO-satser tillagda för att logga mellanliggande resultat till lagring.

Du kan sedan skriva om frågan så här:

Skärmdump av den omskrivna Stream Analytics-frågan som ger intermediära JOIN-resultat till tillfälliga utdata.

Nu startar du jobbet igen och låter det köras i några minuter. Fråga sedan temp1 och temp2 med Visual Studio Cloud Explorer för att generera följande tabeller:

temp1-tabellSkärmdump av temp1-tabellen som visar mellanliggande JOIN-resultat från Stream Analytics-frågan.

temp2-tabellSkärmdump av temp2-tabellen som visar namnkolumnen korrekt ifylld från Stream Analytics-frågan.

Som du kan se, temp1 och temp2 båda har data, och kolumnen name är korrekt fylld i temp2. Men eftersom utdata fortfarande inte innehåller några data, är något fel:

Skärmdump av output1-tabellen som visar att ingen data returneras av Stream Analytics-frågan.

Genom att sampla data kan du vara nästan säker på att problemet finns i den andra JOIN. Du kan ladda ned referensdata från blobben och ta en titt:

Skärmdump av referensdatatabellen som visar ett GUID-format som skiljer sig från kolumnen from i temp2.

Som du kan se skiljer sig formatet på GUID:en i denna referensdata från formatet på kolumnen [from] i temp2. Det är därför datan inte kom in output1 som förväntat.

Fixa dataformatet, ladda upp det till referensblobben och försök igen:

Skärmdump av referensdatatabellen efter att GUID-formatet har korrigerats och laddats upp till referensblobben.

Den här gången formateras datan i utdata och fylls i som förväntat.

Skärmdump av utdatatabellen som visar data formaterad och fylld som förväntat i Stream Analytics-frågan.

Resursanvändningen är hög

Se till att du drar nytta av parallellisering i Azure Stream Analytics. Lär dig att skala med frågeparallellisering av Stream Analytics-jobb genom att konfigurera inmatningspartitioner och justera analysens frågedefinition.

Om resursutnyttjandet stadigt ligger över 80 %, fördröjningen för vattenstämpeln ökar och antalet eftersläppta händelser ökar, bör du överväga att öka antalet strömningsenheter. Hög användning anger att jobbet använder nära de maximalt allokerade resurserna.

Få hjälp

Om du vill ha mer hjälp kan du prova vår frågesida för Microsoft Q&A för Azure Stream Analytics.