Dela via


Sessionsfönster (Azure Stream Analytics)

Session windows group events that arrive at similar times, filter out periods of time where there is no data. Funktionen Sessionsfönster har tre huvudparametrar: timeout, maximal varaktighet och partitioneringsnyckel (valfritt).

Följande diagram illustrerar en ström med en serie händelser och hur de mappas till sessionsfönster med en tidsgräns på 5 minuter och en maximal varaktighet på 10 minuter.

Stream Analytics-sessionsfönster

Ett sessionsfönster börjar när den första händelsen inträffar. Om en annan händelse inträffar inom den angivna tidsgränsen från den senaste inmatade händelsen utökas fönstret till att omfatta den nya händelsen. Annars stängs fönstret vid tidsgränsen om inga händelser inträffar inom tidsgränsen.

Om händelser fortsätter att ske inom den angivna tidsgränsen fortsätter sessionsfönstret att förlängas tills den maximala varaktigheten har uppnåtts. Observera att de maximala varaktighetskontrollintervallen är inställda på samma storlek som den angivna maximala varaktigheten. Om den maximala varaktigheten till exempel är 10 kommer kontrollerna om fönstret överskrider den maximala varaktigheten att ske vid t = 0, 10, 20, 30 osv. Det innebär att den faktiska varaktigheten för ett sessionsfönster sedan kan vara upp till två gånger maxDuration.

Därför avslutas vårt sessionsfönster matematiskt om följande villkor är uppfyllt:

Sessionsfönstrets slutvillkor

När en partitionsnyckel tillhandahålls grupperas händelserna efter nyckeln och sessionsfönstret tillämpas på varje grupp oberoende av varandra. Detta är användbart för fall där du behöver olika sessionsfönster för olika användare eller enheter.

Syntax

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

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

Anteckning

Sessionsfönstret kan användas på ovanstående två sätt.

Argument

timeunit Är tidsenheten för windowsize. I följande tabell visas alla giltiga timeunit-argument.

Tidsunit Förkortningar
day dd, d
timme hh
minut mi, n
sekund ss, s
Millisekund Ms
mikrosekunder Mcs

Timeoutsize

Ett stort heltal som beskriver sessionsfönstrets gapstorlek. Data som inträffar inom gapstorleken grupperas tillsammans i samma fönster.

maxdurationsize

Om den totala fönsterstorleken överskrider angiven maxDurationSize vid en kontrollpunkt stängs fönstret och ett nytt fönster öppnas vid samma punkt. För närvarande är storleken på kontrollintervallet lika med maxDurationSize.

partitionkey

En valfri parameter som anger nyckeln som sessionsfönstret körs över. Om det anges grupperar fönstret bara händelser med samma nyckel.

Exempel

Anta att du har följande json-data:

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

Om du vill mäta hur länge varje användarsession är kan du använda följande fråga:

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)

Föregående fråga skapar ett sessionsfönster med en tidsgräns på 2 minuter, en maximal varaktighet på 60 minuter och partitioneringsnyckeln för user_id. Det innebär att oberoende sessionsfönster skapas för varje user_id. För varje fönster genererar den här frågan utdata som innehåller user_id, starttiden för fönstret (window_start), slutet av fönstret (window_end) och den totala varaktigheten för användarsessionen (duration_in_seconds).