Grundlegendes zu Fensterfunktionen
Ein gemeinsames Ziel der Datenstromverarbeitung besteht darin, Ereignisse in temporale Intervalle oder Fenster zu aggregieren. So lässt sich beispielsweise die Anzahl der Posts in sozialen Medien pro Minute zählen oder die durchschnittliche Niederschlagsmenge pro Stunde berechnen.
Azure Stream Analytics bietet native Unterstützung für fünf Arten temporaler Fensterfunktionen. Mit diesen Funktionen können Sie zeitliche Intervalle definieren, in die Daten aus einer Abfrage aggregiert werden. Die unterstützten Fensterfunktionen sind Tumbling (Rollierend), Hopping (Springend), Sliding (Gleitend), Session (Sitzung) und Snapshot (Momentaufnahme).
Tumbling (Rollierend)
Rollierende Fensterfunktionen segmentieren einen Datenstrom in eine zusammenhängende Reihe von Zeitsegmenten fester Größe, die sich nicht überlappen, und werden auf diese angewendet Ereignisse können nicht zu mehr als einem rollierenden Fenster gehören.
Im Beispiel für ein rollierendes Fenster, das durch die folgende Abfrage dargestellt wird, wird der maximale Lesewert in einminütigen Fenstern ermittelt. Fensterfunktionen werden in Stream Analytics-Aufträgen unter Verwendung der GROUP BY-Klausel der Abfragesyntax angewendet. Die GROUP BY
-Klausel in der folgenden Abfrage enthält die Funktion TumblingWindow()
, die eine einminütige Fenstergröße angibt.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)
Hopping
Fensterfunktionen des Typ Hopping (Springend) modellieren geplante überlappende Fenster, die in der Zeit um einen festen Zeitraum vorwärts springen. Es ist am einfachsten, sich diese als rollierende Fenster vorzustellen, die sich überlappen und häufiger als die Fenstergröße ausgegeben werden können. In der Tat handelt es sich bei rollierenden Fenstern einfach um ein springendes Fenster, bei denen hop
gleich size
ist. Wenn Sie springende Fenster verwenden, können Ereignisse zu mehr als einem Fensterresultset gehören.
Zum Erstellen eines springenden Fensters müssen Sie drei Parameter angeben. Der erste Parameter gibt die Zeiteinheit an, z. B. Sekunde, Minute oder Stunde. Der folgende Parameter legt die Fenstergröße, also die Dauer der einzelnen Fenster, fest. Der letzte erforderliche Parameter ist die Sprunggröße, die angibt, wie viel sich jedes Fenster relativ zum vorherigen bewegt. Ein optionaler vierter Parameter zur Angabe des Versatzes kann ebenfalls verwendet werden.
Die folgende Abfrage veranschaulicht die Verwendung von HoppingWindow()
, wobei timeunit
auf second
festgelegt wird. windowsize
entspricht 60 Sekunden und hopsize
30 Sekunden. Diese Abfrage gibt alle 30 Sekunden ein Ereignis aus, das den maximalen Lesewert enthält, der in den letzten 60 Sekunden aufgetreten ist.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)
Gleitend
Fenster des Typs Sliding (Gleitend) generieren Ereignisse für Zeitpunkte, zu denen sich der Inhalt des Fensters tatsächlich ändert. Dieses Funktionsmodell begrenzt die Anzahl der zu berücksichtigenden Fenster. Azure Stream Analytics gibt Ereignisse nur für die Zeitpunkte aus, zu denen ein Ereignis in das Fenster eintrat oder es verließ. Daher enthält jedes Fenster mindestens ein Ereignis. Ereignisse in gleitenden Fenstern können zu mehr als einem gleitenden Fenster gehören, ähnlich wie bei springenden Fenstern.
Die folgende Abfrage verwendet die SlidingWindow()
-Funktion, um den maximalen Lesewert in jedem einminütigen Fenster zu ermitteln, in dem ein Ereignis aufgetreten ist.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)
Sitzung
Fensterfunktionen des Typs Sitzung dienen zum Gruppieren von Ereignissen, die zu ähnlichen Zeiten eingehen. Zeiträume ohne Daten werden herausgefiltert. Es gibt drei Hauptparameter: Timeout, maximale Dauer und Partitionierungsschlüssel (optional).
Beim Auftreten des ersten Ereignisses wird ein Sitzungsfenster gestartet. Angenommen, ein weiteres Ereignis tritt innerhalb des angegebenen Timeouts ab dem zuletzt erfassten Ereignis ein. In diesem Fall wird das Fenster erweitert, um das neue Ereignis aufzunehmen. Wenn jedoch innerhalb des angegebenen Timeoutzeitraums keine weiteren Ereignisse auftreten, wird das Fenster nach dem Timeout geschlossen. Wenn innerhalb des angegebenen Timeouts weiterhin Ereignisse auftreten, wird das Sitzungsfenster verlängert, bis die maximale Dauer erreicht ist.
Die folgende Abfrage misst die Dauer der Benutzersitzung, indem sie eine SessionWindow
-Instanz über Clickstreamdaten mit timeoutsize
von 20 Sekunden und maximumdurationsize
von 60 Sekunden erstellt.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)
Momentaufnahme
In Fenstern des Typs Snapshot (Momentaufnahme) werden Ereignisse nach identischen Zeitstempelwerten gruppiert. Im Gegensatz zu anderen Fenstertypen ist keine bestimmte Fensterfunktion erforderlich. Sie können ein Momentaufnahmefenster verwenden, indem Sie die System.Timestamp()
-Funktion für die GROUP BY
-Klausel Ihrer Abfrage angeben.
Die folgende Abfrage ermittelt beispielsweise den maximalen Lesewert für Ereignisse, die genau zur gleichen Zeit auftreten.
SELECT System.TimeStamp() AS WindowTime,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()
System.Timestamp()
wird in der GROUP BY
-Klausel als Definition eines Momentaufnahmefensters betrachtet, da es Ereignisse auf der Grundlage der Gleichheit der Zeitstempel in einem Fenster gruppiert.