Verarbeiten von IoT-Datenströmen in Echtzeit mit Azure Stream Analytics
In diesem Artikel erfahren Sie, wie Sie Datenstrom-Verarbeitungslogik erstellen, um Daten von IoT-Geräten (Internet of Things, Internet der Dinge) zu erfassen. Sie verwenden einen echten IoT-Anwendungsfall aus der Praxis, um zu zeigen, wie Sie Ihre Lösung schnell und wirtschaftlich erstellen.
Voraussetzungen
- Erstellen eines kostenlosen Azure-Abonnements
- Herunterladen der Beispielabfrage und Datendateien bei GitHub
Szenario
Contoso, ein Unternehmen im Bereich der industriellen Automatisierung, hat seinen Fertigungsprozess automatisiert. Die Maschinen im Werk verfügen über Sensoren, die Datenströme in Echtzeit ausgeben können. In diesem Szenario möchte ein Production Floor Manager in Echtzeit Einblick in die Sensordaten erhalten, um darin nach Mustern zu suchen und entsprechend darauf zu reagieren. Sie können die Stream Analytics-Abfragesprache (SAQL, Stream Analytics Query Language) für die Sensordaten verwenden, um für den eingehenden Datenstrom interessante Muster zu ermitteln.
In diesem Beispiel werden die Daten mit einem SensorTag-Gerät von Texas Instruments generiert. Die Nutzlast der Daten liegt im JSON-Format vor und sieht wie im folgenden Beispielcodeschnipsel aus:
{
"time": "2016-01-26T20:47:53.0000000",
"dspl": "sensorE",
"temp": 123,
"hmdt": 34
}
In der Praxis können Hunderte dieser Sensoren einen Datenstrom mit Ereignissen generieren. Idealerweise führt ein Gatewaygerät hierbei Code aus, um diese Ereignisse mittels Push an Azure Event Hubs oder Azure IoT Hubs zu übertragen. Ihr Stream Analytics-Auftrag erfasst diese Ereignisse über Event Hubs oder IoT-Hubs führt in Echtzeit Analyseabfragen für die Datenströme aus. Die Ergebnisse können dann an eine der unterstützten Ausgaben gesendet werden.
Zur einfacheren Verwendung enthält dieser Leitfaden zu den ersten Schritten eine Datei mit Beispieldaten, die mit echten SensorTag-Geräten erfasst wurden. Sie können Abfragen für die Beispieldaten ausführen und Ergebnisse anzeigen. In den nachfolgenden Tutorials erfahren Sie, wie Sie Ihren Auftrag mit Eingaben und Ausgaben verbinden und für den Azure-Dienst bereitstellen.
Erstellen eines Stream Analytics-Auftrags
Navigieren Sie zum Azure-Portal.
Wählen Sie im linken Navigationsmenü Alle Dienste und dann Analytics aus, zeigen Sie mit der Maus auf Stream Analytics-Aufträge, und wählen Sie dann Erstellen aus.
Führen Sie auf der Seite Neuer Stream Analytics-Auftrag die folgenden Schritte aus:
Wählen Sie für Abonnement Ihr Azure-Abonnement aus.
Wählen Sie für Ressourcengruppe eine bestehende Ressourcengruppe aus, oder erstellen Sie eine Ressourcengruppe.
Geben Sie unter Name einen eindeutigen Namen für den Stream Analytics-Auftrag ein.
Wählen Sie die Region aus, in der Sie den Stream Analytics-Auftrag bereitstellen möchten. Verwenden Sie den gleichen Standort für Ihre Ressourcengruppe und alle Ressourcen, um die Verarbeitungsgeschwindigkeit zu erhöhen und die Kosten zu reduzieren.
Klicken Sie auf Überprüfen + erstellen.
Überprüfen Sie die Einstellungen auf der Seite Überprüfen und erstellen, und wählen Sie Erstellen aus.
Nach der erfolgreichen Bereitstellung wählen Sie Zu Ressource wechseln aus, um zur Seite Stream Analytics-Auftrag für den Stream Analytics-Auftrag zu navigieren.
Erstellen einer Azure Stream Analytics-Abfrage
Schreiben Sie nach dem Erstellen Ihres Auftrags eine Abfrage. Sie können Abfragen für Beispieldateien testen, ohne eine Eingabe oder Ausgabe mit Ihrem Auftrag zu verbinden.
Laden Sie HelloWorldASA-InputStream.json von GitHub herunter.
Wählen Sie im Azure-Portal auf der Seite Azure Stream Analytics-Auftrag im linken Menü unter Auftragstopologie die Option Abfrage aus.
Wählen Sie Beispieleingabe hochladen, die heruntergeladene Datei
HelloWorldASA-InputStream.json
und dann OK aus.Beachten Sie, dass eine Vorschauversion der Daten in der Tabelle Eingabevorschau automatisch ausgefüllt wird.
Abfrage: Archivieren von Rohdaten
Die einfachste Form einer Abfrage ist eine Passthrough-Abfrage, bei der alle Eingabedaten unter dem angegebenen Ausgabeort archiviert werden. Diese Abfrage ist die Standardabfrage, die in einem neuen Azure Stream Analytics-Auftrag ausgefüllt wird.
Geben Sie im Fenster Abfrage die folgende Abfrage ein, und wählen Sie dann auf der Symbolleiste Testabfrage aus.
SELECT * INTO youroutputalias FROM yourinputalias
Zeigen Sie die Ergebnisse auf der Registerkarte Testergebnisse im unteren Bereich an.
Abfrage: Filtern der Daten basierend auf einer Bedingung
Aktualisieren Sie nun die Abfrage, um die Ergebnisse basierend auf einer Bedingung zu filtern. Die folgende Abfrage zeigt beispielsweise Ereignisse an, die von sensorA
stammen.
Aktualisieren Sie die Abfrage mit dem folgendem Beispiel:
SELECT time, dspl AS SensorName, temp AS Temperature, hmdt AS Humidity INTO youroutputalias FROM yourinputalias WHERE dspl='sensorA'
Wählen Sie Testabfrage aus, um die Ergebnisse der Abfrage anzuzeigen.
Abfrage: Warnung zur Auslösung eines Geschäftsworkflows
Wir fügen unserer Abfrage nun weitere Details hinzu. Für jeden Typ von Sensor möchten wir die Durchschnittstemperatur pro 30-Sekunden-Fenster überwachen und die Ergebnisse nur anzeigen, wenn die Durchschnittstemperatur über 100 Grad liegt.
Aktualisieren Sie die Abfrage wie folgt:
SELECT System.Timestamp AS OutputTime, dspl AS SensorName, Avg(temp) AS AvgTemperature INTO youroutputalias FROM yourinputalias TIMESTAMP BY time GROUP BY TumblingWindow(second,30),dspl HAVING Avg(temp)>100
Wählen Sie Testabfrage aus, um die Ergebnisse der Abfrage anzuzeigen.
Die Ergebnisse umfassen nur noch 245 Zeilen, und es werden die Namen der Sensoren aufgeführt, bei denen die Durchschnittstemperatur höher als 100 ist. Bei dieser Abfrage wird der Datenstrom mit den Ereignissen nach dspl (Sensorname) gruppiert, und es wird ein rollierendes Fenster von 30 Sekunden verwendet. Bei zeitlichen Abfragen muss angegeben werden, wie der Zeitablauf erfolgen soll. Mit der TIMESTAMP BY-Klausel haben Sie die Spalte OUTPUTTIME angegeben, um Zeiten allen Zeitberechnungen zuzuordnen. Ausführliche Informationen finden Sie in den Artikeln Zeitverwaltung (Azure Stream Analytics) und Windowing-Funktionen (Azure Stream Analytics).
Abfrage: Abwesenheit von Ereignissen erkennen
Wie können wir eine Abfrage schreiben, die einen Mangel an Eingabeereignissen findet? Hierzu wird ermittelt, wann ein Sensor zum letzten Mal Daten gesendet und danach fünf Sekunden lang keine weiteren Ereignisse gesendet hat.
Aktualisieren Sie die Abfrage wie folgt:
SELECT t1.time, t1.dspl AS SensorName INTO youroutputalias FROM yourinputalias t1 TIMESTAMP BY time LEFT OUTER JOIN yourinputalias t2 TIMESTAMP BY time ON t1.dspl=t2.dspl AND DATEDIFF(second,t1,t2) BETWEEN 1 and 5 WHERE t2.dspl IS NULL
Wählen Sie Testabfrage aus, um die Ergebnisse der Abfrage anzuzeigen.
Hier verwenden wir den Verknüpfungsvorgang LEFT OUTER für den gleichen Datenstrom (Selbstverknüpfung). Für eine innere Verknüpfung (INNER) wird nur dann ein Ergebnis zurückgegeben, wenn eine Übereinstimmung gefunden wird. Wenn ein Ereignis von der linken Seite der Verknüpfung keine Übereinstimmung besitzt, wird bei LEFT OUTER für alle Spalten der rechten Seite eine Zeile mit NULL zurückgegeben. Dieses Verfahren ist hilfreich, um die Abwesenheit von Ereignissen zu ermitteln. Weitere Informationen finden Sie unter JOIN (Azure Stream Analytics).
Zusammenfassung
In diesem Artikel erfahren Sie, wie Sie verschiedene Abfragen in der Stream Analytics-Abfragesprache schreiben und die Ergebnisse im Browser anzeigen. In diesem Artikel sind jedoch nur die ersten Schritte aufgeführt. Stream Analytics unterstützt verschiedene Ein- und Ausgaben und kann sogar Funktionen in Azure Machine Learning nutzen. Dies macht Stream Analytics zu einem zuverlässigen Tool für die Datenstromanalyse. Weitere Informationen zum Schreiben von Abfragen finden Sie im Artikel zu gängigen Abfragemustern.