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

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

  1. Navigieren Sie zum Azure-Portal.

  2. 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.

    Screenshot: Auswählen der Schaltfläche „Erstellen“ für einen Stream Analytics-Auftrag

  3. Führen Sie auf der Seite Neuer Stream Analytics-Auftrag die folgenden Schritte aus:

    1. Wählen Sie für Abonnement Ihr Azure-Abonnement aus.

    2. Wählen Sie für Ressourcengruppe eine bestehende Ressourcengruppe aus, oder erstellen Sie eine Ressourcengruppe.

    3. Geben Sie unter Name einen eindeutigen Namen für den Stream Analytics-Auftrag ein.

    4. 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.

    5. Klicken Sie auf Überprüfen + erstellen.

      Screenshot: Seite für neuen Stream Analytics-Auftrag

  4. Überprüfen Sie die Einstellungen auf der Seite Überprüfen und erstellen, und wählen Sie Erstellen aus.

  5. 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.

  1. Laden Sie HelloWorldASA-InputStream.json von GitHub herunter.

  2. Wählen Sie im Azure-Portal auf der Seite Azure Stream Analytics-Auftrag im linken Menü unter Auftragstopologie die Option Abfrage aus.

  3. Wählen Sie Beispieleingabe hochladen, die heruntergeladene Datei HelloWorldASA-InputStream.json und dann OK aus.

    Screenshot: Seite **Abfrage** mit ausgewählter Option **Beispieleingabe hochladen**

  4. Beachten Sie, dass eine Vorschauversion der Daten in der Tabelle Eingabevorschau automatisch ausgefüllt wird.

    Screenshot: Beispieleingabedaten auf der Registerkarte „Eingabevorschau“

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.

  1. Geben Sie im Fenster Abfrage die folgende Abfrage ein, und wählen Sie dann auf der Symbolleiste Testabfrage aus.

    SELECT
        *
    INTO
        youroutputalias
    FROM
        yourinputalias
    
  2. Zeigen Sie die Ergebnisse auf der Registerkarte Testergebnisse im unteren Bereich an.

    Screenshot: Beispielabfrage und ihre Ergebnisse

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.

  1. 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'
    
  2. Wählen Sie Testabfrage aus, um die Ergebnisse der Abfrage anzuzeigen.

    Screenshot der Abfrageergebnisse mit dem Filter

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.

  1. 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
    
  2. Wählen Sie Testabfrage aus, um die Ergebnisse der Abfrage anzuzeigen.

    Screenshot: Abfrage mit rollierendem Fenster

    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.

  1. 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
    
  2. Wählen Sie Testabfrage aus, um die Ergebnisse der Abfrage anzuzeigen.

    Screenshot: Abfrage, die Abwesenheit von Ereignissen erkennt

    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.