Verwenden von Verweisdaten für Suchvorgänge in Stream Analytics

Bei Verweisdaten handelt es sich um ein begrenztes Dataset, das statisch ist oder sich nur langsam ändert. Sie werden zum Suchen oder Erweitern Ihrer Datenströme verwendet. Verweisdaten werden auch als Nachschlagetabelle bezeichnet.

Nehmen Sie ein IoT-Szenario als Beispiel. Sie können Metadaten zu Sensoren, die sich nicht häufig ändern, in Verweisdaten speichern. Anschließend können Sie diese mit IoT-Echtzeitdatenströmen verknüpfen.

Azure Stream Analytics lädt Verweisdaten in den Arbeitsspeicher, um eine Streamverarbeitung mit geringer Latenz zu erreichen. Für den Einsatz von Verweisdaten in Ihrem Stream Analytics-Auftrag verwenden Sie in Ihrer Abfrage in der Regel einen JOIN-Vorgang für Verweisdaten.

Beispiel

Sie können in Echtzeit einen Ereignisdatenstrom generieren, wenn Fahrzeuge eine Mautstelle passieren. An der Mautstelle kann das Autokennzeichen in Echtzeit erfasst werden. Diese Daten können mit einem statischen Dataset verknüpft werden, das über Registrierungsdetails verfügt, um abgelaufene Kennzeichen zu identifizieren.

SELECT I1.EntryTime, I1.LicensePlate, I1.TollId, R.RegistrationId  
FROM Input1 I1 TIMESTAMP BY EntryTime  
JOIN Registration R  
ON I1.LicensePlate = R.LicensePlate  
WHERE R.Expired = '1'

In Stream Analytics werden Azure Blob Storage und Azure SQL-Datenbank als Speicherebene für Verweisdaten unterstützt. Zudem können Sie Verweisdaten von Azure Data Factory in Blob Storage transformieren oder kopieren, um cloudbasierte und lokale Datenspeicher zu verwenden.

Azure Blob Storage

Verweisdaten werden als Blobsequenz in aufsteigender Reihenfolge nach dem im Blobnamen angegebenen Datums- bzw. Uhrzeitwert modelliert. Blobs können nur am Sequenzende hinzugefügt werden. Hierzu muss der verwendete Datums-/Uhrzeitwert den Wert des letzten Blobs in der Sequenz übersteigen. Blobs werden in der Eingabekonfiguration definiert.

Weitere Informationen finden Sie unter Verwenden von Verweisdaten aus Blob Storage für einen Stream Analytics-Auftrag.

Konfigurieren von Blobverweisdaten

Um die Verweisdaten zu konfigurieren, müssen Sie zunächst eine Eingabe vom Typ Verweisdaten erstellen. Die folgende Tabelle enthält den Namen jeder Eigenschaft, die Sie beim Erstellen der Verweisdateneingabe angeben müssen, sowie die entsprechende Beschreibung.

Eigenschaftenname BESCHREIBUNG
Eingabealias Ein Anzeigename, der in der Auftragsabfrage verwendet wird, um auf diese Eingabe zu verweisen.
Speicherkonto Der Name des Speicherkontos, in dem sich Ihre Blobs befinden. Wenn sich das Konto im gleichen Abonnement befindet wie Ihr Stream Analytics-Auftrag, wählen Sie es in der Dropdownliste aus.
Speicherkontoschlüssel Der geheime Schlüssel, der dem Speicherkonto zugeordnet ist. Dieser Schlüssel wird automatisch aufgefüllt, wenn sich das Speicherkonto im selben Abonnement befindet wie Ihr Stream Analytics-Auftrag.
Speichercontainer Container stellen eine logische Gruppierung für Blobs bereit, die in Blob Storage gespeichert sind. Wenn Sie ein Blob in Blob Storage hochladen, müssen Sie einen Container für das Blob angeben.
Pfadmuster Mit dieser erforderlichen Eigenschaft werden Ihre Blobs im angegebenen Container gesucht. In dem Pfad können Sie mindestens eine Instanz der beiden Variablen „{date}“ und „{time}“ angeben.
Beispiel 1: products/{date}/{time}/product-list.csv
Beispiel 2: products/{date}/product-list.csv
Beispiel 3: product-list.csv

Wenn das Blob im angegebenen Pfad nicht vorhanden ist, wartet der Stream Analytics-Auftrag auf unbestimmte Zeit, bis das Blob verfügbar ist.
Datumsformat [optional] Wenn Sie innerhalb des von Ihnen angegebenen Pfadmusters „{date}“ verwendet haben, wählen Sie in der Dropdownliste mit den unterstützten Formaten das Datumsformat aus, in dem Ihre Blobs gespeichert werden sollen.
Beispiel: YYYY/MM/DD, MM/DD/YYYY
Zeitformat [optional] Wenn Sie innerhalb des von Ihnen angegebenen Pfadmusters „{time}“ verwendet haben, wählen Sie in der Dropdownliste mit den unterstützten Formaten das Zeitformat aus, in dem Ihre Blobs gespeichert werden sollen.
Beispiele: HH, HH/mm, HH-mm
Ereignisserialisierungsformat Um sicherzustellen, dass Ihre Abfragen wie erwartet funktionieren, muss Stream Analytics das Serialisierungsformat kennen, das Sie für eingehende Datenströme verwenden. Die unterstützten Formate für Verweisdaten sind CSV und JSON.
Codieren UTF-8 ist derzeit das einzige unterstützte Codierungsformat.

Statische Referenzdaten

Es wird möglicherweise nicht erwartet, dass sich Ihre Verweisdaten ändern. Zum Aktivieren der Unterstützung für statische Verweisdaten geben Sie einen statischen Pfad in der Eingabekonfiguration an.

Stream Analytics findet das Blob unter dem angegebenen Pfad. Die Ersetzungstoken „{date}“ und „{time}“ sind nicht erforderlich. Da Verweisdaten in Stream Analytics unveränderlich sind, wird nicht empfohlen, statische Verweisdatenblobs zu überschreiben.

Generieren von Verweisdaten nach einem Zeitplan

Bei Ihren Verweisdaten kann es sich um ein sich langsam änderndes Dataset handeln. Zum Aktualisieren von Verweisdaten geben Sie ein Pfadmuster in der Eingabekonfiguration mithilfe der Ersetzungstoken „{date}“ und „{time}“ an. Stream Analytics ruft die aktualisierten Definitionen von Verweisdaten auf der Grundlage dieses Pfadmusters ab.

Beispiel: Das Muster sample/{date}/{time}/products.csv mit dem Datumsformat YYYY-MM-DD und dem Zeitformat HH-mm weist Stream Analytics an, das aktualisierte Blob sample/2015-04-16/17-30/products.csv am 16. April 2015 um 17:30 (UTC) abzurufen.

Stream Analytics führt in einem Intervall von einer Minute automatisch einen Scan für aktualisierte Verweisdatenblobs durch. Ein Blob mit dem Zeitstempel 10:30:00 kann mit einer kleinen Verzögerung hochgeladen werden, z. B. 10:30:30. Sie werden eine kleine Verzögerung im Stream Analytics-Auftrag bemerken, der auf dieses Blob verweist.

Zur Vermeidung solcher Szenarien laden Sie das Blob vor der angestrebten effektiven Zeit hoch (in diesem Beispiel 10:30:00). Der Stream Analytics-Auftrag hat jetzt genügend Zeit, um das Blob im Arbeitsspeicher zu entdecken und zu laden und um Vorgänge durchzuführen.

Hinweis

Stream Analytics-Aufträge suchen derzeit nur dann nach der Blobaktualisierung, wenn die Zeit des Computers die im Blobnamen codierte Zeit erreicht. Der Auftrag sucht beispielsweise zum frühestmöglichen Zeitpunkt, jedoch nicht früher als am 16. April 2015 um 17:30 Uhr (UTC) nach sample/2015-04-16/17-30/products.csv. Er sucht nie nach einem Blob mit einer codierten Zeit vor der letzten Erkennung.

Nachdem der Auftrag z. B. das Blob sample/2015-04-16/17-30/products.csv gefunden hat, ignoriert er alle Dateien, deren codierte Zeit vor 17:30 Uhr am 16. April 2015 liegt. Wenn im gleichen Container ein spät eintreffendes Blob sample/2015-04-16/17-25/products.csv erstellt wird, wird es vom Auftrag nicht verwendet.

In einem anderen Beispiel wird sample/2015-04-16/17-30/products.csv erst am 16. April 2015 um 22:03 Uhr erstellt, aber im Container ist kein Blob mit einem früheren Zeitpunkt vorhanden. Der Auftrag verwendet dann diese Datei ab dem 16. April 2015 um 22:03 Uhr und verwendet bis dahin die vorherigen Verweisdaten.

Eine Ausnahme von diesem Verhalten besteht, wenn der Auftrag Daten rückwirkend verarbeiten muss oder wenn der Auftrag zum ersten Mal gestartet wird.

Zum Startzeitpunkt sucht der Auftrag nach dem aktuellsten Blob, das vor der angegebenen Startzeit des Auftrags erstellt wurde. Durch dieses Verhalten wird sichergestellt, dass beim Starten des Auftrags ein nicht leeres Verweisdataset zur Verfügung steht. Sollte keines gefunden werden, erscheint die folgende Diagnose: Initializing input without a valid reference data blob for UTC time <start time>.

Wenn ein Verweisdataset aktualisiert wird, wird ein Diagnoseprotokoll generiert: Loaded new reference data from <blob path>. Es kann aus vielen Gründen erforderlich sein, dass ein Auftrag ein vorheriges Verweisdataset erneut laden muss. Der häufigste Grund ist das erneute Verarbeiten früherer Daten. Zu diesem Zeitpunkt wird dasselbe Diagnoseprotokoll generiert. Dies bedeutet nicht, dass aktuelle Datenstromdaten frühere Verweisdaten verwenden.

Mit Azure Data Factory kann das Erstellen der aktualisierten Blobs orchestriert werden, die von Stream Analytics zur Aktualisierung der Verweisdatendefinitionen benötigt werden.

Data Factory ist ein cloudbasierter Daten-Integrationsdienst, der das Verschieben und Transformieren von Daten organisiert und automatisiert. Data Factory unterstützt die Verbindung mit einer großen Anzahl von cloudbasierten und lokalen Datenspeichern. Daten können in regelmäßigen, von Ihnen festgelegten Abständen verschoben werden.

Weitere Informationen zum Einrichten einer Data Factory-Pipeline zum Generieren von Verweisdaten für Stream Analytics, die nach einem vordefinierten Zeitplan aktualisiert werden, finden Sie in diesem GitHub-Beispiel.

Tipps zum Aktualisieren von Blobverweisdaten

  • Überschreiben Sie Verweisdatenblobs nicht, da sie unveränderlich sind.
  • Die empfohlene Methode zum Aktualisieren von Referenzdaten lautet:
    • Verwenden von „{date}“/„{time}“ im Pfadmuster
    • Hinzufügen eines neuen Blobs, indem Sie denselben Container und das in der Auftragseingabe definierte Pfadmuster verwenden
    • Verwenden eines date/time-Werts, der größer als der vom letzten Blob in der Sequenz angegebene Wert ist
  • Verweisdatenblobs werden nicht nach dem Zeitpunkt Zuletzt geändert des Blobs sortiert. Sie werden nur nach den Werten für Datum und Uhrzeit sortiert, die im Blobnamen mithilfe der Ersetzungen „{date}“ und „{time}“ angegeben werden.
  • Um die Auflistung einer großen Anzahl von Blobs zu vermeiden, löschen Sie alte Blobs, für die keine Verarbeitung mehr durchgeführt wird. Stream Analytics muss möglicherweise in einigen Szenarien, z. B. bei einem Neustart, eine kleine Menge erneut verarbeiten.

Azure SQL-Datenbank

Ihr Stream Analytics-Auftrag ruft SQL-Datenbank-Verweisdaten ab und speichert sie zur Verarbeitung als Momentaufnahme im Arbeitsspeicher. Die Momentaufnahme der Verweisdaten wird zudem in einem Container in einem Speicherkonto gespeichert. Sie geben das Speicherkonto in den Konfigurationseinstellungen an.

Der Container wird beim Starten des Auftrags automatisch erstellt. Wenn der Auftrag beendet wird oder in den fehlerhaften Zustand übergeht, werden die automatisch erstellten Container gelöscht, sobald der Auftrag neu gestartet wird.

Wenn es sich bei den Verweisdaten um ein sich langsam änderndes Dataset handelt, müssen Sie die im Auftrag verwendete Momentaufnahme in regelmäßigen Abständen aktualisieren.

Mit Stream Analytics können Sie beim Konfigurieren der Azure SQL-Datenbank-Eingabeverbindung eine Aktualisierungsrate festlegen. Die Stream Analytics-Runtime fragt die SQL-Datenbank-Instanz in dem durch die Aktualisierungsrate angegebenen Intervall ab. Als schnellste Aktualisierungsrate wird einmal pro Minute unterstützt. Für jede Aktualisierung wird in Stream Analytics eine neue Momentaufnahme im angegebenen Speicherkonto gespeichert.

Stream Analytics umfasst zwei Möglichkeiten zum Abfragen Ihrer SQL-Datenbank-Instanz. Eine Momentaufnahmeabfrage ist obligatorisch und muss in jedem Auftrag enthalten sein. In Stream Analytics wird die Momentaufnahmeabfrage regelmäßig basierend auf dem Aktualisierungsintervall ausgeführt. Das Ergebnis der Abfrage (die Momentaufnahme) wird als Verweisdataset verwendet.

Die Momentaufnahmeabfrage sollte für die meisten Szenarien geeignet sein. Wenn bei großen Datasets und schnellen Aktualisierungsraten Leistungsprobleme auftreten, verwenden Sie die Option für die Deltaabfrage. Abfragen, die mehr als 60 Sekunden benötigen, um ein Verweisdataset zurückzugeben, führen zu einem Timeout.

Mit der Deltaabfrage wird in Stream Analytics zunächst die Momentaufnahmeabfrage durchgeführt, um ein Basis-Verweisdataset abzurufen. Anschließend wird regelmäßig die Deltaabfrage gemäß dem Aktualisierungsintervall durchgeführt, um inkrementelle Änderungen abzurufen. Diese inkrementellen Änderungen werden fortlaufend auf das Verweisdataset angewandt, um es auf dem neuesten Stand zu halten. Durch Verwendung der Deltaabfrageoption können sich die Speicherkosten und E/A-Netzwerkvorgänge verringern.

Konfigurieren der SQL-Datenbank-Verweisdaten

Um die SQL-Datenbank-Verweisdaten zu konfigurieren, müssen Sie zunächst eine Verweisdateneingabe erstellen. Die folgende Tabelle enthält den Namen jeder Eigenschaft, die Sie beim Erstellen der Verweisdateneingabe angeben müssen, sowie die entsprechende Beschreibung. Weitere Informationen finden Sie unter Verwenden von Verweisdaten aus einer SQL-Datenbank für einen Stream Analytics-Auftrag.

Sie können eine verwaltete Azure SQL-Instanz als Verweisdateneingabe verwenden. Sie müssen einen öffentlichen Endpunkt in SQL Managed Instance konfigurieren. Anschließend konfigurieren Sie die folgenden Einstellungen manuell in Stream Analytics. Für einen virtueller Azure-Computer mit SQL Server und einer angefügten Datenbank wird ebenfalls das manuelle Konfigurieren dieser Einstellungen unterstützt.

Eigenschaftenname BESCHREIBUNG
Eingabealias Ein Anzeigename, der in der Auftragsabfrage verwendet wird, um auf diese Eingabe zu verweisen.
Subscription Ihr Abonnement
Datenbank Die SQL-Datenbank-Instanz mit den Verweisdaten. Für SQL Managed Instance müssen Sie den Port 3342 angeben. Ein Beispiel ist sampleserver.public.database.windows.net,3342.
Username Der Benutzername, der Ihrer Azure SQL-Datenbank-Instanz zugeordnet ist.
Kennwort Das Kennwort, das Ihrer SQL-Datenbank-Instanz zugeordnet ist.
Regelmäßig aktualisieren Mit dieser Option können Sie eine Aktualisierungsrate auswählen. Wählen Sie Ein, um die Aktualisierungsrate im Format DD:HH:MM anzugeben.
Momentaufnahmeabfrage Mit dieser Standardabfrageoption werden die Verweisdaten von der SQL-Datenbank-Instanz abgerufen werden.
Deltaabfrage Fügen Sie für erweiterte Szenarien mit großen Datasets und einer kurzen Aktualisierungsrate eine Deltaabfrage hinzu.

Größenbeschränkung

Verwenden Sie Verweisdatasets, die kleiner als 300 MB sind, um eine optimale Leistung zu erzielen. Verweisdatasets mit bis zu 5 GB werden in Aufträgen mit mindestens sechs Streamingeinheiten unterstützt. Die Verwendung eines großen Verweisdatasets kann sich auf die End-to-End-Latenz Ihres Auftrags auswirken.

Die Abfragekomplexität kann erhöht werden, um zustandsbehaftete Verarbeitung wie Aggregate im Fenstermodus, temporale Joins und temporale Analysefunktionen einzuschließen. Mit zunehmender Komplexität nimmt die maximal unterstützte Größe von Verweisdaten ab.

Wenn Stream Analytics die Verweisdaten nicht laden und keine komplexen Vorgänge ausführen kann, steht für den Auftrag nicht genügend Arbeitsspeicher zur Verfügung, und der Auftrag ist nicht erfolgreich. In solchen Fällen erreicht die Metrik für die Auslastung der Streamingeinheiten in Prozent den Wert 100 %.

Anzahl von Streamingeinheiten Empfohlene Größe
1 50 MB oder weniger
3 150 MB oder weniger
6 und mehr 5 GB oder weniger

Die Unterstützung der Komprimierung steht für Verweisdaten nicht zur Verfügung. Für Verweisdatasets mit einer Größe von über 300 MB verwenden Sie SQL-Datenbank als Quelle mit Deltaabfrage für optimale Leistung. Wenn die Deltaabfrageoption in solchen Szenarien nicht verwendet wird, werden bei jeder Aktualisierung des Verweisdatasets Spitzen in der Metrik für die Wasserzeichenverzögerung angezeigt.

Verknüpfen mehrerer Verweisdatasets in einem Auftrag

Sie können nur eine Referenzdateneingabe mit einer Streaming-Eingabe verknüpfen. Zum Verknüpfen mehrerer Verweis-Datasets teilen Sie Ihre Abfrage in mehrere Schritte auf. Hier sehen Sie ein Beispiel:

With Step1 as (
    --JOIN input stream with reference data to get 'Desc'
    SELECT streamInput.*, refData1.Desc as Desc
    FROM    streamInput
    JOIN    refData1 ON refData1.key = streamInput.key 
)
--Now Join Step1 with second reference data
SELECT *
INTO    output 
FROM    Step1
JOIN    refData2 ON refData2.Desc = Step1.Desc 

IoT Edge-Aufträge

Für Stream Analytics-Edge-Aufträge werden nur lokale Verweisdaten unterstützt. Wenn ein Auftrag auf einem IoT Edge-Gerät bereitgestellt wird, werden Verweisdaten über den benutzerdefinierten Dateipfad geladen. Halten Sie auf dem Gerät eine Verweisdatendatei bereit.

Ordnen Sie die Verweisdatendatei für einen Windows-Container auf dem lokalen Laufwerk an, und geben Sie das lokale Laufwerk mit dem Docker-Container frei. Erstellen Sie für einen Linux-Container ein Docker-Volume, und fügen Sie die Datendatei auf dem Volume ein.

Die Aktualisierung der Verweisdaten auf einem IoT Edge-Gerät wird durch eine Bereitstellung ausgelöst. Nach dem Auslösen übernimmt das Stream Analytics-Modul die aktualisierten Daten, ohne die Ausführung des Auftrags zu beenden.

Sie können die Verweisdaten auf zwei Arten aktualisieren:

  • Aktualisieren des Verweisdatenpfads in Ihrem Stream Analytics-Auftrag über das Azure-Portal
  • Aktualisieren der IoT Edge-Bereitstellung

Nächste Schritte