Problembehandlung von Azure Stream Analytics-Abfragen

Dieser Artikel beschreibt häufige Probleme bei der Entwicklung von Azure Stream Analytics-Abfragen, die Behandlung von Abfrageproblemen und die Behebung der Probleme. Viele Schritte zur Problembehandlung erfordern, dass Sie Ressourcenprotokolle für Ihren Stream Analytics-Auftrag aktivieren. Wenn Sie Ressourcenprotokolle nicht aktiviert haben, finden Sie weitere Informationen unter Problembehandlung von Azure Stream Analytics mit Ressourcenprotokollen.

Die Abfrage liefert nicht die erwartete Ausgabe

  1. Untersuchen Sie die Fehler durch lokales Testen:

    • Im Azure-Portal wählen Sie im Tab Abfrage Test aus. Verwenden Sie die heruntergeladenen Beispieldaten, um die Abfrage zu testen. Untersuchen Sie alle Fehler, und versuchen Sie, diese zu korrigieren.
    • Sie können Ihre Abfrage auch lokal testen, indem Sie Azure Stream Analytics-Tools für Visual Studio oder Visual Studio Code verwenden.
  2. Debuggen Sie Abfragen nach und nach lokal anhand des Auftragsdiagramms in Azure Stream Analytics-Tools für Visual Studio Code. Das Job-Diagramm zeigt, wie Daten von Eingabequellen, zum Beispiel Azure Event Hubs und Azure IoT Hub, durch mehrere Abfrageschritte und schließlich zu Output-Sinks fließen. Das Skript ordnet jeden Abfrageschritt einer temporären Ergebnismenge zu, die Sie mithilfe der WITH-Anweisung definieren. Sehen Sie sich die Daten und Kennzahlen in jedem Zwischenergebnisset an, um die Ursache des Problems zu finden.

    Screenshot des Jobdiagramms in Visual Studio Code, das das Vorschauergebnis für einen Abfrageschritt zeigt.

  3. Wenn Sie Timestamp By verwenden, vergewissern Sie sich, dass die Ereignisse Zeitstempel haben, die später als die Startzeit des Auftrags sind.

  4. Beseitigen Sie häufige Fallen wie Folgende:

    • Eine WHERE-Klausel in der Abfrage filterte alle Ereignisse heraus, sodass die Abfrage keine Ausgabe erzeugt.
    • Eine CAST-Funktion schlägt fehl, wodurch der Job fehlschlägt. Verwenden Sie stattdessen TRY_CAST, um Typumwandlungsfehler zu vermeiden.
    • Warten Sie bei der Verwendung von Fensterfunktionen die gesamte Fensterdauer ab, um die Ausgabe der Abfrage zu sehen.
    • Der Zeitstempel für Ereignisse liegt vor dem Startzeitpunkt des Jobs, sodass der Auftrag die Ereignisse weglässt.
    • JOIN-Bedingungen stimmen nicht überein. Wenn es keine Übereinstimmungen gibt, liefert die Abfrage keine Ausgabe.
  5. Stellen Sie sicher, dass Sie die Richtlinien zur Ereignisreihenfolge wie erwartet konfigurieren. Wechseln Sie zu Einstellungen, und wählen Sie Ereignisreihenfolge aus. Der Test-Button wendet die Richtlinie nicht an, wenn du die Abfrage testest. Dieses Ergebnis ist ein Unterschied zwischen dem Testen im Browser und dem Ausführen des Auftrags in der Produktion.

  6. Debuggen mithilfe von Aktivitäts- und Ressourcenprotokollen:

Progressives Debuggen von Abfragen

Bei der Echtzeit-Datenverarbeitung hilft es zu wissen, wie die Daten in der Mitte der Abfrage aussehen. Um die Zwischendaten anzuzeigen, verwenden Sie das Job-Diagramm in Visual Studio. Wenn du kein Visual Studio hast, kannst du zusätzliche Schritte unternehmen, um Zwischendaten auszugeben.

Da Azure Stream Analytics Eingaben oder Schritte eines Jobs mehrfach lesen kann, kannst du zusätzliche SELECT INTO Anweisungen schreiben. Dadurch werden Zwischendaten in den Speicher eingeleitet und du kannst die Korrektheit der Daten überprüfen, genau wie es Watch-Variablen beim Debuggen eines Programms tun.

Die folgende Beispielabfrage in einem Azure Stream Analytics-Auftrag weist eine Datenstromeingabe, zwei Verweisdateneingaben und eine Ausgabe in Azure Table Storage auf. Die Abfrage verknüpft Daten aus dem Event Hub und aus zwei Verweisblobs, um den Namen und Informationen zur Kategorie abzurufen:

Screenshot einer Beispielabfrage für Stream Analytics, die eine Event Hub-Eingabe mithilfe von SELECT INTO mit zwei Referenzblobs zusammenführt.

Der Job läuft, erzeugt aber keine Ereignisse in der Ausgabe. Auf dem hier gezeigten Monitoring-Kachel sieht man, dass die Eingabe Daten erzeugt, aber man weiß nicht, welcher Schritt des JOINs alle Ereignisse abgeworfen hat.

Screenshot der Stream Analytics Monitoring-Kachel, die Eingabeereignisse zeigt, die empfangen werden, während keine Ausgabeereignisse erzeugt werden.

In dieser Situation kannst du ein paar zusätzliche SELECT INTO Anweisungen hinzufügen, um die Zwischenergebnisse JOIN und die von der Eingabe gelesenen Daten zu "protokollieren".

In diesem Beispiel haben wir zwei neue "temporäre Ausgaben" hinzugefügt. Sie können jedes beliebige Spülbecken sein, das Sie möchten. Hier wird Azure Storage als Beispiel verwendet:

Screenshot einer Stream Analytics-Abfrage mit zusätzlichen SELECT INTO Anweisungen, die hinzugefügt wurden, um Zwischenergebnisse in die Speicherung zu bringen.

Sie können dann die Abfrage wie folgt umschreiben:

Screenshot der neu geschriebenen Stream Analytics-Abfrage, die zwischenliegende JOIN-Ergebnisse in temporäre Ausgaben ausgibt.

Starten Sie nun den Auftrag erneut, und lassen Sie ihn einige Minuten laufen. Fragen Sie dann temp1 und temp2 mit dem Visual Studio Cloud Explorer ab, um die folgenden Tabellen zu erstellen:

temp1-TabelleScreenshot der temp1-Tabelle, der zwischenliegende JOIN-Ergebnisse aus der Stream Analytics-Abfrage zeigt.

temp2-TabelleScreenshot der temp2-Tabelle, der die Namensspalte korrekt aus der Stream Analytics-Abfrage ausgefüllt zeigt.

Wie Sie sehen, temp1 und temp2 beide enthalten Daten, und die Spalte name ist korrekt in temp2ausgefüllt. Da die Ausgabe jedoch immer noch keine Daten enthält, stimmt etwas nicht:

Screenshot der output1-Tabelle, die keine Daten zeigt, die von der Stream Analytics-Abfrage zurückgegeben werden.

Indem Sie die Daten auswerten, können Sie fast sicher sein, dass das Problem beim zweiten JOINliegt. Sie können die Referenzdaten aus dem Blob herunterladen und ansehen:

Screenshot der Referenzdatentabelle, der ein GUID-Format zeigt, das sich von der Spalte FROM in Temp2 unterscheidet.

Wie Sie sehen können, unterscheidet sich das Format der GUID in diesen Referenzdaten vom Format der [from] Spalte in temp2. Deshalb sind die Daten nicht wie erwartet in output1 angekommen.

Repariere das Datenformat, lade es in den Referenzblob hoch und versuche es erneut:

Screenshot der Referenzdatentabelle, nachdem das GUID-Format korrigiert und in den Referenzblob hochgeladen wurde.

Dieses Mal werden die Daten in der Ausgabe wie erwartet formatiert und aufgefüllt.

Screenshot der Ausgabetabelle, die Daten zeigt, die wie erwartet in der Stream Analytics-Abfrage formatiert und ausgefüllt sind.

Die Ressourcenverwendung ist hoch

Stellen Sie sicher, dass Sie die Vorteile der Parallelisierung in Azure Stream Analytics nutzen. Lerne, mit Abfrageparallelisierung von Stream Analytics-Jobs zu skalieren, indem du Eingabepartitionen konfigurierst und die Analyse-Abfragedefinition abstimmst.

Wenn die Ressourcenauslastung dauerhaft über 80 % liegt, die Watermark-Verzögerung steigt und die Anzahl der aufgestauten Ereignisse zunimmt, erhöhen Sie ggf. die Streamingeinheiten. Eine hohe Auslastung deutet darauf hin, dass der Auftrag fast die maximale Anzahl der bereitgestellten Ressourcen verwendet.

Hilfe erhalten

Weitere Unterstützung finden Sie auf der Frageseite von Microsoft Q&A (Fragen und Antworten) zu Azure Stream Analytics.