Einführung in die Stream Analytics-Windowing-Funktionen

Bei Szenarien mit „Time Streaming“ ist das Durchführen von Vorgängen für die Daten in temporalen Fenstern ein häufiges Muster. Stream Analytics verfügt über native Unterstützung für Windowing-Funktionen, sodass Entwickler komplexe Streaming-Verarbeitungsaufträge mit sehr geringem Aufwand erstellen können.

Fünf Arten temporaler Fenster stehen zur Auswahl:

Sie verwenden die Fensterfunktionen in der GROUP BY-Klausel der Abfragesyntax in Ihren Stream Analytics-Aufträgen. Sie können Ereignisse auch über mehrere Fenster hinweg aggregieren, indem Sie die Windows() -Funktion verwenden.

Für alle Windowing-Vorgänge werden am Ende des Fensters Ergebnisse ausgegeben. Beachten Sie, dass Sie beim Starten eines Datenstromanalyseauftrags die Startzeit für die Auftragsausgabe angeben können. Das System ruft automatisch vorherige Ereignisse in den eingehenden Datenströmen ab, um das erste Fenster zum angegebenen Zeitpunkt auszugeben. Wenn Sie z. B. mit der Option Jetzt beginnen, werden sofort Daten ausgegeben. Die Ausgabe des Fensters ist ein einzelnes Ereignis, das auf der verwendeten Aggregatfunktion basiert. Das Ausgabeereignis verfügt über den Zeitstempel vom Ende des Fensters, und alle Fensterfunktionen werden mit einer festen Länge definiert.

Diagram that shows the concept of Stream Analytics window functions.

Rollierendes Fenster

Verwenden Sie Funktionen für rollierende Fenster, um einen Datenstrom in einzelne Zeitsegmente zu unterteilen und eine Funktion mit ihnen auszuführen.

Die wichtigsten Unterscheidungsmerkmale rollierender Fenster sind:

  • Sie wiederholen sich nicht.
  • Sie überlappen sich nicht.
  • Ein Ereignis darf nicht zu mehr als einem rollierendem Fenster gehören.

Diagram that shows an example Stream Analytics tumbling window.

Das sind die Eingabedaten für das Beispiel:

Stamp CreatedAt TimeZone
1 2021-10-26T10:15:01 PST
5 2021-10-26T10:15:03 PST
4 2021-10-26T10:15:06 PST
... ... ...

Das ist die Beispielausgabe:

SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)

Hier ist die Beispielausgabe:

WindowEndTime TimeZone Anzahl
2021-10-26T10:15:10 PST 5
2021-10-26T10:15:20 PST 2
2021-10-26T10:15:30 PST 4

Springendes Fenster

Bei den Funktionen für springende Fenster wird für einen festen Zeitraum ein Sprung nach vorn durchgeführt. Sie können sie sich wie rollierende Fenster vorstellen, die sich überlappen können und häufiger als die Fenstergröße ausgegeben werden. Ereignisse können zu Resultsets von mehr als einem springenden Fenstern gehören. Um ein springendes Fenster an ein rollierendes Fenster anzugleichen, passen Sie die Sprunggröße an die Fenstergröße an.

Diagram that shows an example of the hopping window.

Sehen Sie sich den Beispieldaten an:

Stamp CreatedAt Thema
1 2021-10-26T10:15:01 Streaming
5 2021-10-26T10:15:03 Streaming
4 2021-10-26T10:15:06 Streaming
... ... ...

Das ist die Beispielausgabe:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)

Hier ist die Beispielausgabe:

WindowEndTime Thema Anzahl
2021-10-26T10:15:10 Streaming 5
2021-10-26T10:15:15 Streaming 3
2021-10-26T10:15:20 Streaming 2
2021-10-26T10:15:25 Streaming 4
2021-10-26T10:15:30 Streaming 4

Gleitendes Fenster

Im Gegensatz zu rollierenden oder springenden Fenstern geben gleitende Fenster Ereignisse nur für die Zeitpunkte aus, zu denen sich der Inhalt des Fensters tatsächlich ändert. Anders ausgedrückt: wenn ein Ereignis das Fenster betritt oder verlässt. Jedes Fenster verfügt also über mindestens ein Ereignis. Ähnlich wie bei springenden Fenstern können Ereignisse zu mehr als einem gleitenden Fenster gehören.

Diagram that shows an example of a sliding window.

Das sind die Beispieleingabedaten:

Stamp CreatedAt Thema
1 2021-10-26T10:15:10 Streaming
5 2021-10-26T10:15:12 Streaming
9 2021-10-26T10:15:15 Streaming
7 2021-10-26T10:15:15 Streaming
8 2021-10-26T10:15:27 Streaming

Das ist die Beispielausgabe:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3

Ausgabe:

WindowEndTime Thema Anzahl
2021-10-26T10:15:15 Streaming 4
2021-10-26T10:15:20 Streaming 3

Sitzungsfenster

Mit Funktionen für Sitzungsfenster werden Ereignisse gruppiert, die zu ähnlichen Zeitpunkten eingehen. Zeiträume, in denen keine Daten anfallen, werden herausgefiltert. Es gibt drei Hauptparameter:

  • Timeout
  • Maximale Dauer
  • Partitionsschlüssel (optional).

Diagram that shows a sample Stream Analytics session window.

Ein Sitzungsfenster beginnt, wenn das erste Ereignis eintritt. Wenn ein anderes Ereignis innerhalb des angegebenen Zeitlimits für das letzte erfasste Ereignis eintritt, wird das Fenster erweitert, damit es das neue Ereignis enthält. Falls innerhalb des Zeitlimits keine Ereignisse eintreten, wird das Fenster zum Zeitlimit-Endzeitpunkt geschlossen.

Wenn innerhalb des angegebenen Zeitraums weiter Ereignisse auftreten, wird das Sitzungsfenster so lange erweitert, bis die maximale Dauer erreicht ist. Die Überprüfungsintervalle für die maximale Dauer werden auf die gleiche Größe wie die angegebene maximale Dauer festgelegt. Wenn die maximale Dauer beispielsweise 10 beträgt, werden die Überprüfungen, ob für das Fenster die maximale Dauer überschritten wird, nach dem Muster t = 0, 10, 20, 30 usw. durchgeführt.

Wenn ein Partitionsschlüssel angegeben wird, werden die Ereignisse nach dem Schlüssel gruppiert, und das Sitzungsfenster wird auf jede Gruppe separat angewendet. Diese Partitionierung ist für Fälle nützlich, in denen Sie unterschiedliche Sitzungsfenster für unterschiedliche Benutzer oder Geräte benötigen.

Das sind die Beispieleingabedaten:

Stamp CreatedAt Thema
1 2021-10-26T10:15:01 Streaming
2 2021-10-26T10:15:04 Streaming
3 2021-10-26T10:15:13 Streaming
... ... ...

Das ist die Beispielausgabe:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)

Ausgabe:

WindowEndTime Thema Anzahl
2021-10-26T10:15:09 Streaming 2
2021-10-26T10:15:24 Streaming 4
2021-10-26T10:15:31 Streaming 2
2021-10-26T10:15:39 Streaming 1

Momentaufnahmefenster

Momentaufnahmefenster gruppieren Ereignisse, die denselben Zeitstempel aufweisen. Im Gegensatz zu anderen Fenstertypen, die eine bestimmte Fensterfunktion benötigen (z. B. SessionWindow()), können Sie ein Momentaufnahmefenster anwenden, indem Sie der GROUP BY-Klausel „System.Timestamp()“ hinzufügen.

Diagram that shows a sample Steam Analytics snapshot window.

Das sind die Beispieleingabedaten:

Stamp CreatedAt Thema
1 2021-10-26T10:15:04 Streaming
2 2021-10-26T10:15:04 Streaming
3 2021-10-26T10:15:04 Streaming
... ... ...

Das ist die Beispielausgabe:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

Hier ist die Beispielausgabe:

WindowEndTime Thema Anzahl
2021-10-26T10:15:04 Streaming 4
2021-10-26T10:15:10 Streaming 2
2021-10-26T10:15:13 Streaming 1
2021-10-26T10:15:22 Streaming 2

Nächste Schritte

Weitere Informationen finden Sie in folgenden Artikeln: