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 Standard Parameter: Timeout, maximale Dauer und Partitionierungsschlüssel (optional).

Das folgende Diagramm veranschaulicht einen Stream mit einer Reihe von Ereignissen und wie sie sitzungsfenstern mit einem Timeout von 5 Minuten und einer maximalen Dauer von 10 Minuten zugeordnet werden.

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 Prüfintervalle für die maximale Dauer auf die gleiche Größe wie die angegebene maximale Dauer festgelegt sind. Wenn die maximale Dauer beispielsweise 10 beträgt, erfolgt die Überprüfung, ob das Fenster die maximale Dauer überschreitet, bei t = 0, 10, 20, 30 usw. Das bedeutet, dass die tatsächliche Dauer eines Sitzungsfensters bis zu zweimal maxDuration sein kann.

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

Bedingungen für sitzungsfensterende

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 selben Fenster gruppiert.

maxdurationsize

Wenn die Gesamtfenstergröße die angegebene maxDurationSize-Größe an einem Prüfpunkt überschreitet, wird das Fenster geschlossen und am selben Punkt 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 ausgeführt wird. Wenn angegeben, gruppiert das Fenster nur Ereignisse mit demselben Schlüssel.

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 dauern, 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 jeden 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.