Megosztás a következőn keresztül:


Munkamenetablak (Azure Stream Analytics)

A munkamenetablakok hasonló időpontokban érkező eseményeit csoportosítja, kiszűrve azokat az időszakokat, amikor nincsenek adatok. A munkamenetablak-függvénynek három fő paramétere van: időtúllépés, maximális időtartam és particionálási kulcs (nem kötelező).

Az alábbi ábra egy eseménysorozatot ábrázoló streamet mutat be, és azt, hogy ezek hogyan vannak leképezve 5 perces időtúllépési munkamenetablakokba, és legfeljebb 10 percig.

Stream Analytics-munkamenet ablaka

A munkamenetablak az első esemény bekövetkezésekor kezdődik. Ha egy másik esemény történik az utolsó betöltött esemény megadott időtúllépésén belül, akkor az ablak az új eseményre is kiterjed. Ellenkező esetben, ha az időtúllépésen belül nem történik esemény, akkor az ablak az időtúllépéskor bezárul.

Ha az események a megadott időtúllépésen belül maradnak, a munkamenet ablaka a maximális időtartam eléréséig tart. Vegye figyelembe, hogy a maximális időtartam-ellenőrzési időközök a megadott maximális időtartammal megegyező méretűre vannak beállítva. Ha például a maximális időtartam 10, akkor a t = 0, 10, 20, 30 stb. Ez azt jelenti, hogy a munkamenet-ablak tényleges időtartama legfeljebb kétszeri maxDuration lehet.

Így matematikailag a munkamenet ablaka akkor ér véget, ha az alábbi feltétel teljesül:

Munkamenetablak zárófeltételei

Ha megad egy partíciókulcsot, az eseményeket a kulcs csoportosítja, és a munkamenet ablaka egymástól függetlenül lesz alkalmazva az egyes csoportokra. Ez olyan esetekben hasznos, amikor különböző munkamenetablakokra van szüksége a különböző felhasználókhoz vagy eszközökhöz.

Syntax

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

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

Megjegyzés

A Munkamenet ablak a fenti két módon használható.

Argumentumok

timeunit Az ablakméret időegysége. Az alábbi táblázat az összes érvényes időunit-argumentumot felsorolja.

Timeunit Rövidítések
nap dd, d
óra óó
perc mi, n
másodperc ss, s
ezredmásodperc Ms
mikroszekundum Mcs

időtúllépés

Egy nagy egész szám, amely a munkamenetablak résméretét írja le. A résméreten belül előforduló adatok ugyanabban az ablakban vannak csoportosítva.

maxdurationsize

Ha a teljes ablakméret meghaladja a megadott maxDurationSize értéket egy ellenőrzési ponton, akkor az ablak bezárul, és egy új ablak nyílik meg ugyanazon a ponton. Jelenleg az ellenőrzési időköz mérete megegyezik a maxDurationSize értékével.

partitionkey

Nem kötelező paraméter, amely megadja a munkamenetablak által üzemeltetett kulcsot. Ha meg van adva, az ablak csak ugyanazon kulcs eseményeit csoportosítja.

Példák

Tegyük fel, hogy a következő json-adatokkal rendelkezik:

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

Az egyes felhasználói munkamenetek időtartamának méréséhez használja az alábbi lekérdezést:

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)

Az előző lekérdezés egy munkamenetablakot hoz létre 2 perces időtúllépéssel, legfeljebb 60 perces időtartammal és user_id particionálási kulcsával. Ez azt jelenti, hogy minden user_id független munkamenetablakok jönnek létre. Ez a lekérdezés minden egyes ablakban létrehoz egy kimenetet, amely tartalmazza a user_id, az ablak kezdő időpontját (window_start), az ablak végét (window_end) és a felhasználói munkamenet teljes időtartamát (duration_in_seconds).