Verwenden von Verweisdaten aus einer SQL-Datenbank für einen Azure Stream Analytics-Auftrag

Referenzdaten sind statische oder sich langsam verändernde Datensätze, die Sie mit Ihren Streaming-Daten verbinden, um sie zu bereichern, zum Beispiel indem Sie Produktdetails zu einem Strom von Verkaufsereignissen hinzufügen. Azure Stream Analytics unterstützt Azure SQL-Datenbank als Quelle für Referenzdaten, sodass Sie diese Daten mit Ihren Echtzeit-Eingaben nachschlagen und kombinieren können.

Dieser Artikel zeigt Ihnen, wie Sie eine Azure SQL-Datenbank als Referenzdateneingabe für einen Stream Analytics-Job konfigurieren können, indem Sie sowohl das Azure-Portal als auch das Visual Studio mit Stream Analytics-Tools verwenden.

Fügen Sie SQL-Datenbank-Referenzdaten über das Azure-Portal hinzu

Verwenden Sie die folgenden Schritte, um die Azure SQL-Datenbank als Referenzeingabequelle über das Azure-Portal hinzuzufügen:

Portalvoraussetzungen

  1. Erstellen Sie einen Stream Analytics-Auftrag.

  2. Erstelle ein Speicherkonto für den Stream Analytics-Job.

    Wichtig

    Azure Stream Analytics speichert Snapshots innerhalb dieses Speicherkontos. Wenn Sie die Retentionsrichtlinie konfigurieren, stellen Sie sicher, dass der gewählte Zeitraum die gewünschte Wiederherstellungsdauer für Ihren Stream Analytics-Job enthält.

  3. Erstellen Sie Ihre Azure SQL-Datenbank mit einem Datensatz, den der Stream Analytics-Job als Referenzdaten verwendet.

Definition der SQL-Datenbank-Referenzdateneingabe

  1. Wählen Sie in Ihrem Stream Analytics-Auftrag Eingaben unter Auftragstopologie aus. Wähle Referenzeingabe hinzufügen und dann SQL Database aus.

    Screenshot des Stream Analytics Inputs-Fensters mit Hinzufügen der Referenzeingabe ausgewählt, die eine Dropdown-Liste mit den Werten Blob Storage und SQL-Datenbank zeigt.

  2. Fülle die Stream Analytics Eingabekonfiguration aus. Wählen Sie den Datenbanknamen, den Servernamen und die Anmeldedaten für die Datenbank aus. Um die Eingabe Ihrer Referenzdaten regelmäßig zu aktualisieren, wählen Sie On aus und geben Sie das Aktualisierungsintervall im Format DD:HH:MM an. Bei großen Datensätzen mit einem kurzen Aktualisierungsintervall erfasst die Deltaabfrage Änderungen innerhalb Ihrer Referenzdaten, indem sie alle Zeilen in der SQL-Datenbank abruft, die zwischen einer Startzeit, @deltaStartTime, und einer Endzeit, @deltaEndTime, eingefügt oder gelöscht wurden.

    Weitere Informationen finden Sie unter Deltaabfrage.

    Screenshot der neuen Eingabeseite der SQL-Datenbank mit einem Konfigurationsformular im linken Bereich und einer Snapshot-Abfrage im rechten Bereich.

  3. Testen Sie die Momentaufnahmenabfrage im SQL-Abfrage-Editor. Weitere Informationen finden Sie unter Verwenden Sie den SQL-Abfrageeditor des Azure-Portals, um Daten zu verbinden und abzufragen.

Gib das Speicherkonto in der Job-Konfiguration an

Gehe unter Konfigurieren zu den Einstellungen des Speicherkontos und wähle dann Speicherkonto hinzufügen.

Screenshot des Einstellungsfensters Speicherkonto mit dem Button

Starten des Auftrags

  1. Nachdem du die anderen Eingaben, Ausgaben und Abfragen konfiguriert hast, startest du den Stream Analytics-Job.

Fügen Sie SQL-Datenbankreferenzdaten mithilfe von Visual Studio hinzu

Verwenden Sie die folgenden Schritte, um Azure SQL-Datenbank als Referenzeingabequelle mit Visual Studio hinzuzufügen:

Voraussetzungen für Visual Studio

  1. Installieren Sie die Stream Analytics-Tools für Visual Studio. Die Stream Analytics-Tools unterstützen folgende Versionen von Visual Studio:

    • Visual Studio 2015
    • Visual Studio 2019
  2. Machen Sie sich mit dem Schnellstart der Stream Analytics-Tools für Visual Studio vertraut.

  3. Erstellen Sie ein Speicherkonto.

    Wichtig

    Azure Stream Analytics speichert Snapshots innerhalb dieses Speicherkontos. Wenn Sie die Retentionsrichtlinie konfigurieren, stellen Sie sicher, dass der gewählte Zeitraum die gewünschte Wiederherstellungsdauer für Ihren Stream Analytics-Job enthält.

Erstellen einer SQL-Datenbanktabelle

Verwenden Sie SQL Server Management Studio, um eine Tabelle zum Speichern Ihrer Verweisdaten zu erstellen. Ausführliche Informationen finden Sie unter Entwerfen Ihrer ersten Azure SQL-Datenbank mit SSMS.

Die folgende Anweisung erstellt die Beispieltabelle:

create table chemicals(Id Bigint,Name Nvarchar(max),FullName Nvarchar(max));

Auswählen Ihres Abonnements

  1. Wählen Sie in Visual Studio im Menü Ansicht den Server-Explorer aus.

  2. Wählen Sie Azure aus (oder klicken Sie mit der rechten Maustaste), wählen Sie Connect to Microsoft Azure Subscription und melden Sie sich mit Ihrem Azure-Konto an.

Erstellen eines Stream Analytics-Projekts

  1. Wählen Sie Datei>Neues Projekt.

  2. In der Vorlagenliste wählen Sie Stream Analytics und dann Azure Stream Analytics Application aus.

  3. Geben Sie den Projektnamen, den Standort und den Lösungsnamen ein und wählen Sie dann OK aus.

    Screenshot des Dialogfelds „Neues Projekt“ mit ausgewählter Stream Analytics-Vorlage und ausgewählter Azure Stream Analytics Application sowie hervorgehobenen Feldern „Name“, „Standort“ und „Projektmappenname“.

Eingabe von SQL-Datenbankreferenzdaten definieren

  1. Erstellen Sie eine neue Eingabe.

    Screenshot des Dialogs

  2. Öffne Input.json in Projektmappen-Explorer.

  3. Füllen Sie die Stream Analytics-Eingabekonfiguration aus. Geben Sie den Datenbanknamen, den Servernamen, den Aktualisierungstyp und die Aktualisierungsrate ein. Geben Sie die Aktualisierungsrate im Format DD:HH:MM an.

    Screenshot der Stream Analytics Input Configuration mit Werten, die aus Dropdown-Listen eingegeben oder ausgewählt wurden.

    Wenn du nur einmal ausführen oder periodisch ausführen wählst, generiert Visual Studio eine SQL CodeBehind-Datei namens [Input Alias].snapshot.sql im Projekt unter dem Input.json Dateiknoten.

    Screenshot von Projektmappen-Explorer mit der SQL CodeBehind-Datei Chemicals.snapshot.sql hervorgehoben.

    Wenn du Periodic Refresh with Delta wählst, generiert Visual Studio zwei SQL CodeBehind-Dateien: [Input Alias].snapshot.sql und [Input Alias].delta.sql.

    Screenshot von Projektmappen-Explorer mit den SQL CodeBehind-Dateien Chemicals.delta.sql und Chemicals.snapshot.sql hervorgehoben.

  4. Öffnen Sie die SQL-Datei im Editor, und schreiben Sie die SQL-Abfrage.

  5. Wenn Sie Visual Studio 2019 verwenden und SQL Server Data Tools installiert haben, können Sie die Abfrage testen, indem Sie Ausführen auswählen. Ein Assistent öffnet sich, der Ihnen hilft, sich mit der SQL-Datenbank zu verbinden, und das Abfrageergebnis erscheint im Fenster am unteren Ende.

Festlegen eines Speicherkontos

Öffnen Sie die Datei JobConfig.json, um das Speicherkonto festzulegen, in dem SQL-Referenzsnapshots gespeichert werden.

Screenshot der Stream Analytics Job-Konfiguration mit Standardwerten und den Globalen Speichereinstellungen hervorgehoben.

Lokales Testen und Bereitstellen in Azure

Bevor du den Job auf Azure deployest, kannst du die Abfragelogik lokal mit Live-Eingabedaten testen. Weitere Informationen zu dieser Funktion finden Sie unter Live Data lokal testen mit Azure Stream Analytics Tools für Visual Studio (Vorschau). Wenn du mit dem Testen fertig bist, wähle "Submit to Azure" aus. Informationen dazu, wie Sie den Auftrag starten, finden Sie im Schnellstart Erstellen eines Stream Analytics-Auftrags mit den Azure Stream Analytics-Tools für Visual Studio.

Deltaabfrage

Wenn du die Delta-Abfrage verwendest, verwende temporale Tabellen in der Azure SQL-Datenbank.

  1. Erstellen Sie eine temporale Tabelle in Azure SQL-Datenbank.

       CREATE TABLE DeviceTemporal
       (
          [DeviceId] int NOT NULL PRIMARY KEY CLUSTERED
          , [GroupDeviceId] nvarchar(100) NOT NULL
          , [Description] nvarchar(100) NOT NULL
          , [ValidFrom] datetime2 (0) GENERATED ALWAYS AS ROW START
          , [ValidTo] datetime2 (0) GENERATED ALWAYS AS ROW END
          , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
       )
       WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DeviceHistory));  -- DeviceHistory table will be used in Delta query
    
  2. Erstellen Sie die Snapshot-Abfrage.

    Verwenden Sie den @snapshotTime-Parameter , um die Stream Analytics-Laufzeit anzuweisen, den Referenzdatensatz aus der zum Systemzeit gültigen SQL-Datenbank-Temporal Tabelle abzurufen. Wenn Sie diesen Parameter nicht angeben, riskieren Sie, aufgrund von Taktverschiebungen einen ungenauen Basisreferenzdatensatz zu erhalten. Das folgende Beispiel zeigt eine vollständige Snapshot-Abfrage:

       SELECT DeviceId, GroupDeviceId, [Description]
       FROM dbo.DeviceTemporal
       FOR SYSTEM_TIME AS OF @snapshotTime
    
  3. Erstellen Sie die Deltaabfrage.

    Diese Abfrage ruft alle Zeilen in der SQL-Datenbank ab, die innerhalb einer Startzeit, @deltaStartTime und einer Endzeit, @deltaEndTime, eingefügt oder gelöscht wurden. Die Deltaabfrage muss die gleichen Spalten wie die Momentaufnahmenabfrage zurückgeben, sowie die Spalte operation. Diese Spalte definiert, ob die Zeile zwischen @deltaStartTime und @deltaEndTime eingefügt oder gelöscht wird. Die sich ergebenden Zeilen werden mit 1 gekennzeichnet, wenn die Datensätze eingefügt wurden, oder 2, wenn sie gelöscht wurden. Die Abfrage muss außerdem auf SQL-Server-Seite das watermark hinzufügen, um sicherzustellen, dass alle Aktualisierungen im Deltazeitraum korrekt erfasst werden. Die Verwendung einer Delta-Abfrage ohne Wasserstandsmarke kann zu einem inkorrekten Referenzdatensatz führen.

    Für Datensätze, die aktualisiert wurden, übernimmt die temporale Tabelle die Buchführung durch Erfassen eines Einfüge- und Löschvorgangs. Die Stream-Analytics-Laufzeit wendet dann die Ergebnisse der Delta-Abfrage auf den vorherigen Snapshot an, um die Referenzdaten aktuell zu halten. Das folgende Beispiel zeigt eine Delta-Abfrage:

       SELECT DeviceId, GroupDeviceId, Description, ValidFrom as _watermark_, 1 as _operation_
       FROM dbo.DeviceTemporal
       WHERE ValidFrom BETWEEN @deltaStartTime AND @deltaEndTime   -- records inserted
       UNION
       SELECT DeviceId, GroupDeviceId, Description, ValidTo as _watermark_, 2 as _operation_
       FROM dbo.DeviceHistory   -- table we created in step 1
       WHERE ValidTo BETWEEN @deltaStartTime AND @deltaEndTime     -- record deleted
    

    Die Stream Analytics-Laufzeit kann zusätzlich zur Delta-Abfrage regelmäßig die Snapshot-Abfrage ausführen, um Checkpoints zu speichern.

    Wichtig

    Wenn du Referenzdaten-Delta-Abfragen verwendest, solltest du nicht mehrfach identische Änderungen an der temporalen Referenzdatentabelle vornehmen. Dies kann zu falschen Ergebnissen führen. Hier ist ein Beispiel, das dazu führen könnte, dass Referenzdaten falsche Ergebnisse liefern:

     UPDATE myTable SET VALUE=2 WHERE ID = 1;
     UPDATE myTable SET VALUE=2 WHERE ID = 1;
    

    Korrektes Beispiel:

     UPDATE myTable SET VALUE = 2 WHERE ID = 1 and not exists (select * from myTable where ID = 1 and value = 2);
    

    Diese Bedingung stellt sicher, dass keine doppelten Updates auftreten.

Testen Ihrer Abfrage

Überprüfen Sie, dass Ihre Abfrage den erwarteten Datensatz liefert, den der Stream Analytics-Job als Referenzdaten verwendet. Um Ihre Abfrage zu testen, gehen Sie unter dem Abschnitt Jobtopologie im Portal zu Eingaben. Wählen Sie dann Beispieldaten auf Ihrer SQL-Datenbank-Referenzeingabe aus. Nachdem das Beispiel verfügbar ist, können Sie die Datei herunterladen und prüfen, ob die zurückgegebenen Daten wie erwartet sind. Um Ihre Entwicklungs- und Testiterationen zu optimieren, nutzen Sie die Stream Analytics-Tools für Visual Studio. Du kannst auch jedes andere Tool verwenden, das du bevorzugst, um sicherzustellen, dass die Abfrage die richtigen Ergebnisse aus deiner Azure SQL-Datenbank liefert, und dann diese Abfrage in deinem Stream Analytics-Job verwenden.

Testen Ihrer Abfrage mit Visual Studio Code

Installieren Sie Azure Stream Analytics-Tools und SQL Server (mssql) in Visual Studio Code, und richten Sie Ihr ASA-Projekt ein. Weitere Informationen finden Sie unter Quickstart: Erstellen eines Azure Stream Analytics-Auftrags in Visual Studio Code und im Tutorial zur SQL Server-Erweiterung (mssql).

  1. Konfigurieren Sie die SQL-Verweisdateneingabe:

    Screenshot eines Visual Studio Code-Editor-Tabs, der die ReferenceSQLDatabase.json-Datei anzeigt.

  2. Wählen Sie das SQL Server-Symbol aus und wählen Sie Verbindung hinzufügen.

    Screenshot des linken Bereichs, wobei die Option „Verbindung hinzufügen“ hervorgehoben ist.

  3. Füllen Sie die Verbindungsinformationen aus:

    Screenshot des Verbindungsformulars mit den Datenbank- und Serverinformationsfeldern markiert.

  4. Wähle und halte (oder klicke mit Rechtsklick) in Referenz-SQL und wähle Abfrage ausführen.

    Screenshot des Kontextmenüs mit der Option

  5. Wählen Sie die Verbindung aus:

    Screenshot eines Dialogfelds, in dem steht: Erstelle ein Verbindungsprofil aus der untenstehenden Liste, wobei der Eintrag einer Liste hervorgehoben ist.

  6. Überprüfen Sie das Abfrageergebnis:

    Screenshot der Suchergebnisse in einem Visual Studio Code-Editor-Tab.

Häufig gestellte Fragen

Entstehen zusätzliche Kosten, wenn ich SQL-Referenzdateneingaben in Azure Stream Analytics verwende?

Es gibt keine zusätzlichen Kosten pro Streaming-Einheit im Stream Analytics Job. Allerdings muss dem Stream Analytics-Auftrag ein Azure Storage-Konto zugeordnet werden. Der Stream Analytics-Job fragt die SQL-Datenbank (während des Jobstarts und des Aktualisierungsintervalls) ab, um den Referenzdatensatz abzurufen, und speichert diesen Snapshot im Speicherkonto. Das Speichern dieser Snapshots verursacht zusätzliche Kosten, die auf der Preisseite für das Azure-Speicherkonto aufgeführt sind.

Wie erkenne ich, ob ein Referenzdatensnapshot aus der SQL-Datenbank abgefragt und im Azure Stream Analytics-Job verwendet wird?

Zwei Metriken, gefiltert nach Logical Name (unter Metrics im Azure-Portal), ermöglichen es Ihnen, die Gesundheit der SQL-Datenbank-Referenzdaten zu überwachen.

  • InputEvents: Diese Metrik misst die Anzahl der Datensätze, die aus dem SQL-Datenbank-Referenzdatensatz geladen werden.
  • InputEventBytes: Diese Metrik misst die Größe der Momentaufnahme der Referenzdaten, die in den Arbeitsspeicher des Stream Analytics-Auftrags geladen wird.

Zusammen geben beide Metriken an, ob der Job die SQL Database abfragt, um den Referenzdatensatz abzurufen und ihn dann in den Speicher zu laden.

Brauche ich eine spezielle Art von Azure SQL-Datenbank?

Azure Stream Analytics funktioniert mit jeder Art von Azure SQL-Datenbank. Allerdings kann die Aktualisierungsrate, die Sie für die Eingabe Ihrer Referenzdaten festlegen, Ihre Abfragelast beeinflussen. Um die Delta-Abfrageoption zu verwenden, verwenden Sie temporale Tabellen in Azure SQL-Datenbank.

Warum speichert Azure Stream Analytics Snapshots in einem Azure Storage-Konto?

Stream Analytics garantiert die genau einmalige Verarbeitung von Ereignissen und die mindestens einmalige Zustellung von Ereignissen. Wenn vorübergehende Probleme deinen Job beeinträchtigen, ist eine kleine Wiederholung nötig, um den Zustand wiederherzustellen. Um das Wiederholen zu ermöglichen, müssen diese Snapshots in einem Azure Storage-Konto gespeichert werden. Für weitere Informationen zum Checkpoint-Replay siehe Checkpoint- und Replay-Konzepte in Azure Stream Analytics Jobs.