Delen via


Sessievenster

✅ Azure Stream Analytics ✅ Fabric Eventstream

Sessievensters groeperen gebeurtenissen die op vergelijkbare tijden aankomen, filteren perioden waarin er geen gegevens zijn. De sessievensterfunctie heeft drie hoofdparameters: time-out, maximale duur en partitioneringssleutel (optioneel).

In het volgende diagram ziet u een stroom met een reeks gebeurtenissen en hoe deze worden toegewezen aan sessievensters van 5 minuten time-out en de maximale duur van 10 minuten.

Stream Analytics-sessievenster

Een sessievenster begint wanneer de eerste gebeurtenis plaatsvindt. Als er een andere gebeurtenis plaatsvindt binnen de opgegeven time-out van de laatst opgenomen gebeurtenis, wordt het venster uitgebreid met de nieuwe gebeurtenis. Als er geen gebeurtenissen plaatsvinden binnen de time-out, wordt het venster tijdens de time-out gesloten.

Als gebeurtenissen binnen de opgegeven time-out blijven optreden, wordt het sessievenster verlengd totdat de maximale duur is bereikt. Houd er rekening mee dat de intervallen voor maximale duurcontrole zijn ingesteld op dezelfde grootte als de opgegeven maximale duur. Als de maximale duur bijvoorbeeld 10 is, wordt gecontroleerd of het venster de maximale duur overschrijdt op t = 0, 10, 20, 30, enzovoort. Dit betekent dat de werkelijke duur van een sessievenster vervolgens maximaal twee keer maxDuration kan zijn.

Zo eindigt ons sessievenster wiskundig als aan de volgende voorwaarde wordt voldaan:

Eindevoorwaarden

Wanneer er een partitiesleutel wordt opgegeven, worden de gebeurtenissen gegroepeerd op basis van de sleutel en het sessievenster op elke groep afzonderlijk toegepast. Dit is handig voor gevallen waarin u verschillende sessievensters nodig hebt voor verschillende gebruikers of apparaten.

Syntaxis

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

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

Opmerking

Het sessievenster kan op de bovenstaande twee manieren worden gebruikt.

Argumenten

tijdeenheid Is de tijdseenheid voor de venstergrootte. De volgende tabel bevat alle geldige tijdeenheidargumenten.

Tijdeenheid Afkortingen
dagen dd, d
uur Hh
minuut mi, n
tweede ss, s
milliseconde mevrouw
microseconde Mcs

time-outsize

Een groot geheel getal dat de tussenruimtegrootte van het sessievenster beschrijft. Gegevens die zich binnen de tussenruimtegrootte voordoen, worden gegroepeerd in hetzelfde venster.

maxdurationsize

Als de totale venstergrootte groter is dan de opgegeven maxDurationSize op een controlepunt, wordt het venster gesloten en wordt er op hetzelfde moment een nieuw venster geopend. Momenteel is de grootte van het controle-interval gelijk aan maxDurationSize.

partitionkey

Een optionele parameter waarmee de sleutel wordt opgegeven waarop het sessievenster werkt. Als dit is opgegeven, worden in het venster alleen gebeurtenissen van dezelfde sleutel gegroepeerd.

Voorbeelden

Stel dat u de volgende json-gegevens hebt:

[
  // 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"
  },
  // ...
]

Als u wilt meten hoe lang elke gebruikerssessies zijn, kunt u de volgende query gebruiken:

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)

De voorgaande query maakt een sessievenster met een time-out van 2 minuten, een maximale duur van 60 minuten en partitioneringssleutel van user_id. Dit betekent dat er voor elke user_id onafhankelijke sessievensters worden gemaakt. Voor elk venster genereert deze query uitvoer met de user_id, de begintijd van het venster (window_start), het einde van het venster (window_end) en de totale duur van de gebruikerssessie (duration_in_seconds).