Problemen met Azure Stream Analytics-query's oplossen

In dit artikel worden veelvoorkomende problemen beschreven met het ontwikkelen van Azure Stream Analytics-query's, het oplossen van queryproblemen en het oplossen van de problemen. Voor veel stappen voor probleemoplossing moet u resourcelogboeken inschakelen voor uw Stream Analytics-taak. Als u geen resourcelogboeken hebt ingeschakeld, zie Problemen met Azure Stream Analytics oplossen met behulp van resourcelogboeken.

Query levert geen verwachte output op

  1. Bekijk fouten door lokaal te testen:

    • In het Azure-portaal, kies op het tabblad QueryTest. Gebruik de gedownloade voorbeeldgegevens om de query te testen. Bekijk eventuele fouten en probeer deze te corrigeren.
    • Je kunt je query ook lokaal testen door gebruik te maken van Azure Stream Analytics-tools voor Visual Studio of Visual Studio Code.
  2. Fouten opsporen in query's, stap voor stap, lokaal met behulp van taakdiagrammen in Azure Stream Analytics-hulpprogramma's voor Visual Studio Code. Het taakdiagram laat zien hoe data stroomt vanuit invoerbronnen, bijvoorbeeld Azure Event Hubs en Azure IoT Hub, via meerdere querystappen en uiteindelijk naar outputsinks. Het script koppelt elke querystap aan een tijdelijke resultaatset die je definieert met de WITH-instructie. Bekijk de gegevens en metrics in elke intermediaire resultaatset om de bron van het probleem te vinden.

    Screenshot van het taakdiagram in Visual Studio Code toont het previewresultaat voor een querystap.

  3. Als u Timestamp By gebruikt, controleert u of de gebeurtenissen tijdstempels hebben die groter zijn dan de begintijd van de taak.

  4. Veelvoorkomende valkuilen elimineren, zoals:

    • Een WHERE-clausule in de query filterde alle gebeurtenissen eruit, zodat de query geen output oplevert.
    • Een CAST-functie mislukt, waardoor de taak mislukt. Gebruik in plaats daarvan TRY_CAST om fouten met typecasts te voorkomen.
    • Wanneer u vensterfuncties gebruikt, wacht u tot de volledige vensterduur is verstreken voordat de query uitvoer oplevert.
    • De tijdstempel voor gebeurtenissen gaat vooraf aan het starttijdstip van de opdracht, dus de opdracht laat de gebeurtenissen vallen.
    • JOIN-voorwaarden komen niet overeen. Als er geen matches zijn, levert de query geen output op.
  5. Zorg ervoor dat je het beleid voor het ordenen van evenementen zoals verwacht configureert. Ga naar Instellingen en selecteer Gebeurtenisvolgorde. De Test-knop past het beleid niet toe wanneer je de query test. Dit resultaat is een verschil tussen testen in de browser en het uitvoeren van de taak in productie.

  6. Fouten opsporen met behulp van activiteiten- en resourcelogboeken:

Queries stapsgewijs debuggen

Bij realtime dataverwerking is het handig om te weten hoe de data eruitziet in het midden van de query. Om de tussenliggende data te bekijken, gebruik je het taakdiagram in Visual Studio. Als je geen Visual Studio hebt, kun je extra stappen nemen om intermediate data te genereren.

Omdat Azure Stream Analytics invoer of stappen van een taak meerdere keren kan lezen, kun je extra SELECT INTO statements schrijven. Hiermee worden tussenliggende data opgeslagen en kun je de juistheid van de data controleren, net zoals watch-variabelen doen wanneer je een programma debuggt.

De volgende voorbeeldquery in een Azure Stream Analytics-taak heeft één stroominvoer, twee verwijzingsgegevensinvoer en uitvoer naar Azure-tabelopslag. De query voegt gegevens van de Event Hub en twee referentie-blobs toe om de naam en categoriegegevens op te halen:

Screenshot van een voorbeeld van een Stream Analytics-query die een event hub-invoer verbindt met twee referentieblobs door gebruik te maken van SELECT INTO.

De taak draait, maar veroorzaakt geen gebeurtenissen in de output. Op de Monitoring-tegel , hier getoond, zie je dat de invoer data produceert, maar je weet niet welke stap van de JOIN alle gebeurtenissen heeft laten vallen.

Screenshot van de Stream Analytics Monitoring-tegel die invoergebeurtenissen toont die zijn ontvangen terwijl er geen uitvoergebeurtenissen worden geproduceerd.

In deze situatie kun je een paar extra SELECT INTO statements toevoegen om de tussenresultaten JOIN en de data die uit de invoer wordt gelezen te "loggen".

In dit voorbeeld voegden we twee nieuwe "tijdelijke uitgangen" toe. Ze kunnen elke gootsteen zijn die je wilt. Hier gebruiken we Azure Storage als voorbeeld:

Screenshot van een Stream Analytics-query met extra SELECT INTO-instructies toegevoegd om tussentijdse resultaten in opslag te loggen.

Vervolgens kunt u de query als volgt herschrijven:

Screenshot van de herschreven Stream Analytics-query die tussentijdse JOIN-resultaten naar tijdelijke uitvoer geeft.

Start de taak opnieuw en laat deze enkele minuten draaien. Voer vervolgens met Visual Studio Cloud Explorer query's uit op temp1 en temp2 om de volgende tabellen te genereren:

temp1-tabelScreenshot van de temp1-tabel die tussentijdse JOIN-resultaten toont van de Stream Analytics-query.

temp2-tabelScreenshot van de temp2-tabel met de naamkolom correct ingevuld vanuit de Stream Analytics-query.

Zoals je kunt zien, temp1 en temp2 beide hebben data, en de name kolom is correct ingevuld in temp2. Omdat output echter nog steeds geen data bevat, is er iets mis:

Screenshot van de output1-tabel die geen data toont die door de Stream Analytics-query wordt teruggegeven.

Door de gegevens te bemonsteren, kun je er vrijwel zeker van zijn dat het probleem bij de tweede JOINligt. U kunt de referentiegegevens uit de blob downloaden en een kijkje nemen:

Screenshot van de referentiedatatabel met een GUID-formaat dat verschilt van de from-kolom in temp2.

Zoals je kunt zien, is het formaat van de GUID in deze referentiedata anders dan het formaat van de [from] kolom in temp2. Daarom kwamen output1 de gegevens niet binnen zoals verwacht.

Herstel het dataformaat, upload het naar de referentieblob en probeer het opnieuw:

Screenshot van de referentiedatatabel nadat het GUID-formaat is gecorrigeerd en geüpload naar de referentieblob.

Deze keer worden de gegevens in de uitvoer opgemaakt en ingevuld zoals verwacht.

Screenshot van de uitvoertabel die gegevens toont die geformatteerd en ingevuld zijn zoals verwacht in de Stream Analytics-query.

Resourcegebruik is hoog

Zorg ervoor dat u profiteert van parallelle uitvoering in Azure Stream Analytics. Leer opschalen met query-parallelisatie van Stream Analytics-jobs door invoerpartities te configureren en de analytics-querydefinitie af te stemmen.

Als het resourcegebruik consistent hoger is dan 80%, neemt de watermerkvertraging toe en neemt het aantal backloggebeurtenissen toe, overweeg dan om streaming-eenheden te verhogen. Hoge benutting geeft aan dat de taak bijna de maximaal toegewezen resources gebruikt.

Hulp vragen

Probeer onze microsoft Q&A-vragenpagina voor Azure Stream Analytics voor meer hulp.