Freigeben über


Sitzungsfenster

✅ Azure Stream Analytics ✅ Fabric Eventstream

Sitzungsfenster-Gruppenereignisse, die zu ähnlichen Zeiten eingehen, Filtern von Zeiträumen, 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 deren Zuordnung zu Sitzungsfenstern von 5 Minuten Timeout und der 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. Bitte beachten Sie, dass die maximalen Dauerüberprüfungsintervalle auf die gleiche Größe wie die angegebene maximale Dauer festgelegt sind. Wenn die maximale Dauer z. B. 10 ist, 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.

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

Sitzungsfenster-Endbedingungen

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 unterschiedliche 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 Ist die Zeiteinheit für die Fenstergröße. In der folgenden Tabelle sind alle gültigen Zeiteinheitsargumente aufgeführt.

Timeunit Abkürzungen
Tag dd, d
Stunde Hh
Minute mi, n
Sekunde ss, s
Millisekunde Frau
Mikrosekunde mcs

Timeoutsize

Eine große ganze Zahl, die die Abstandsgröße des Sitzungsfensters beschreibt. Daten, die innerhalb der Abstandsgröße auftreten, werden im selben Fenster gruppiert.

maxdurationsize

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

partitionkey

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

Beispiele

Angenommen, Sie haben 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"
  },
  // ...
]

Zum Messen der Dauer der einzelnen Benutzersitzungen 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 partitionierungsschlüsseln von user_id. Dies bedeutet, dass für jede user_id unabhängige Sitzungsfenster erstellt werden. Für jedes Fenster generiert diese Abfrage die Ausgabe, die die user_id enthält, die Startzeit des Fensters (window_start), das Ende des Fensters (window_end) und die Gesamtdauer der Benutzersitzung (duration_in_seconds).