Sessievenster (Azure Stream Analytics)
Sessievensters groeperen gebeurtenissen die op vergelijkbare tijden aankomen, waarbij perioden worden gefilterd waarin er geen gegevens zijn. De functie Sessievenster heeft drie hoofdparameters: time-out, maximale duur en partitiesleutel (optioneel).
In het volgende diagram ziet u een stream met een reeks gebeurtenissen en hoe deze zijn toegewezen aan sessievensters met een time-out van 5 minuten en een maximale duur van 10 minuten.
Een sessievenster begint wanneer de eerste gebeurtenis plaatsvindt. Als een andere gebeurtenis optreedt 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 gesloten tijdens de time-out.
Als gebeurtenissen zich binnen de opgegeven time-out blijven voordoen, wordt het sessievenster verlengd totdat de maximale duur is bereikt. Houd er rekening mee dat de maximale duurcontrole-intervallen 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 tweemaal maxDuration kan zijn.
Wiskundig gezien eindigt het sessievenster als aan de volgende voorwaarde wordt voldaan:
Wanneer een partitiesleutel wordt opgegeven, worden de gebeurtenissen gegroepeerd op basis van de sleutel en wordt het sessievenster afzonderlijk toegepast op elke groep. Dit is handig voor gevallen waarin u verschillende sessievensters voor verschillende gebruikers of apparaten nodig hebt.
Syntax
{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]
{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]
Notitie
Het sessievenster kan op de bovenstaande twee manieren worden gebruikt.
Argumenten
timeunit Is de tijdseenheid voor de venstergrootte. De volgende tabel bevat alle geldige tijdeenheidargumenten.
Tijdeenheid | Afkortingen |
---|---|
day | dd, d |
uur | hh |
minuut | mi, n |
seconde | ss, s |
Milliseconde | ms |
microseconde | Mcs |
time-outgrootte
Een groot geheel getal dat de grootte van de tussenruimte van het sessievenster aangeeft. 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 op hetzelfde punt een nieuw venster geopend. Momenteel is de grootte van het controle-interval gelijk aan maxDurationSize.
partitiesleutel
Een optionele parameter die de sleutel aangeeft waarop het sessievenster wordt uitgevoerd. Indien opgegeven, groepeert het venster alleen gebeurtenissen van dezelfde sleutel.
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 gebruikerssessie duurt, 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)
Met de voorgaande query wordt een sessievenster gemaakt met een time-out van 2 minuten, een maximale duur van 60 minuten en een partitiesleutel 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).