Sitzungsfenster (Azure Stream Analytics)

Sitzungsfenster gruppieren Ereignisse, die zu ähnlichen Zeiten eingehen, und filtern Zeiträume heraus, in denen keine Daten vorhanden sind. Die Sitzungsfensterfunktion verfügt über drei Hauptparameter: Timeout, maximale Dauer und Partitionierungsschlüssel (optional).

Das folgende Diagramm veranschaulicht einen Datenstrom mit einer Reihe von Ereignissen und ihrer Zuordnung zu Sitzungsfenstern mit einem Timeout von 5 Minuten und einer maximalen Dauer von 10 Minuten.

Stream Analytics – Sitzungsfenster

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 eintreten, wird das Sitzungsfenster so lange erweitert, bis die maximale Dauer erreicht ist. Beachten Sie, dass die maximale Dauer der Überprüfungsintervalle auf die gleiche Größe wie die angegebene maximale Dauer festgelegt ist. Wenn die maximale Dauer beispielsweise 10 beträgt, wird überprüft, ob das Fenster die maximale Dauer überschreitet, bei t = 0, 10, 20, 30 usw. Dies bedeutet, dass die tatsächliche Dauer eines Sitzungsfensters dann bis zu zweimal maxDuration sein kann.

Daher endet unser Sitzungsfenster rechnerisch, wenn die folgende Bedingung erfüllt ist:

Endbedingungen des Sitzungsfensters

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

Syntax

{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]

{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]

Hinweis

Das Sitzungsfenster kann auf zwei Arten verwendet werden.

Argumente

timeunit Die Zeiteinheit für die Fenstergröße. In der folgenden Tabelle sind alle gültigen Argumente für "timeunit" aufgeführt.

Timeunit Abkürzungen
day dd, d
hour hh
minute mi, n
second ss, s
Millisekunde ms
Mikrosekunde mcs

timeoutsize

Eine große ganze Zahl, die die Lückengröße des Sitzungsfensters beschreibt. Daten, die innerhalb der Lückengröße auftreten, werden im gleichen Fenster gruppiert.

maxdurationsize

Wenn die Gesamtfenstergröße die angegebene maxDurationSize an einem Prüfpunkt überschreitet, wird das Fenster geschlossen, und an demselben Punkt wird ein neues Fenster geöffnet. Derzeit ist die Größe des Überprüfungsintervalls gleich maxDurationSize.

Partitionkey

Ein optionaler Parameter, der den Schlüssel angibt, über den das Sitzungsfenster arbeitet. Wenn angegeben, gruppiert das Fenster nur Ereignisse desselben Schlüssels.

Beispiele

Angenommen, Sie verfügen über die folgenden JSON-Daten:

[
  // time: the timestamp when the user clicks on the link
  // user_id: the id of the user
  // url: the url the user clicked on
  {
    "time": "2017-01-26T00:00:00.0000000z",
    "user_id": 0,
    "url": "www.example.com/a.html"
  },
  {
    "time": "2017-01-26T00:00:20.0000000z",
    "user_id": 0,
    "url": "www.example.com/b.html"
  },
  {
    "time": "2017-01-26T00:00:55.0000000z",
    "user_id": 1,
    "url": "www.example.com/c.html"
  },
  // ...
]

Um zu messen, wie lange die einzelnen Benutzersitzungen sind, können Sie die folgende Abfrage verwenden:

CREATE TABLE localinput(time DATETIME, user_id BIGINT, url NVARCHAR(MAX))
SELECT
    user_id,
    MIN(time) AS window_start,
    System.Timestamp() AS window_end,
    DATEDIFF(s, MIN(time), System.Timestamp()) AS duration_in_seconds
FROM localinput TIMESTAMP BY time
GROUP BY user_id, SessionWindow(minute, 2, 60) OVER (PARTITION BY user_id)

Die vorherige Abfrage erstellt ein Sitzungsfenster mit einem Timeout von 2 Minuten, einer maximalen Dauer von 60 Minuten und einem Partitionierungsschlüssel von user_id. Dies bedeutet, dass für jede user_id unabhängige Sitzungsfenster erstellt werden. Für jedes Fenster generiert diese Abfrage eine Ausgabe, die die user_id, die Startzeit des Fensters (window_start), das Ende des Fensters (window_end) und die Gesamtdauer der Benutzersitzung (duration_in_seconds) enthält.