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.
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.
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.
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.
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).
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.
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: