Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
✅Eventstream prostředků infrastruktury Azure Stream Analytics ✅
Události skupin oken relace, které přicházejí v podobných časech, odfiltrují období, kdy nejsou k dispozici žádná data. Funkce okna relace má tři hlavní parametry: časový limit, maximální dobu trvání a klíč dělení (volitelné).
Následující diagram znázorňuje datový proud s řadou událostí a jejich mapování do oken relace s časovým limitem 5 minut a maximální dobou trvání 10 minut.
Okno relace začíná, když dojde k první události. Pokud dojde k jiné události v zadaném časovém limitu od poslední ingestované události, okno se rozšíří tak, aby zahrnovalo novou událost. V opačném případě, pokud v časovém limitu nedojde k žádným událostem, okno se zavře při vypršení časového limitu.
Pokud se události v zadaném časovém limitu stále vyskytují, okno relace se bude rozšiřovat až do dosažení maximální doby trvání. Upozorňujeme, že maximální intervaly kontroly doby trvání jsou nastaveny na stejnou velikost jako zadaná maximální doba trvání. Pokud je například maximální doba trvání 10, zkontroluje, jestli okno překročí maximální dobu trvání, proběhne v t = 0, 10, 20, 30 atd. To znamená, že skutečná doba trvání okna relace pak může být až dvakrát maxDuration.
Proto se okno relace matematicky ukončí, pokud je splněna následující podmínka:
Pokud je k dispozici klíč oddílu, události se seskupí podle klíče a okno relace se uplatní na každou skupinu nezávisle. To je užitečné v případech, kdy potřebujete různá okna relací pro různé uživatele nebo zařízení.
Syntaxe
{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]
{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]
Poznámka:
Okno relace lze použít výše dvěma způsoby.
Argumenty
timeunit Je jednotkou času pro časové období. V následující tabulce jsou uvedeny všechny platné argumenty časového limitu.
| Timeunit | Zkratky |
|---|---|
| den | dd, d |
| hodina | Hh |
| minuta | mi, n |
| vteřina | ss, s |
| milisekunda | milisekunda |
| mikrosekunda | Mcs |
Vypršení časového limitu
Velké celé číslo, které popisuje velikost mezery okna relace. Data, ke kterým dochází v rámci velikosti mezery, se seskupí do stejného okna.
maxdurationsize
Pokud celková velikost okna překročí zadanou hodnotu maxDurationSize v kontrolním bodu, okno se zavře a otevře se nové okno ve stejném bodě. V současné době je velikost intervalu kontroly rovna maxDurationSize.
partitionkey
Volitelný parametr, který určuje klíč, se kterým okno relace pracuje. Pokud je zadáno, okno seskupí pouze události stejného klíče.
Příklady
Předpokládejme, že máte následující data JSON:
[
// 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"
},
// ...
]
Pokud chcete změřit, jak dlouho jednotlivé relace uživatelů jsou, můžete použít následující dotaz:
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)
Předchozí dotaz vytvoří okno relace s časovým limitem 2 minuty, maximální dobou trvání 60 minut a klíčem dělení user_id. To znamená, že pro každou user_id se vytvoří nezávislá okna relace. Pro každé okno tento dotaz vygeneruje výstup obsahující user_id, počáteční čas okna (window_start), konec okna (window_end) a celkovou dobu trvání uživatelské relace (duration_in_seconds).