Principy funkcí oken
Běžným cílem zpracování datových proudů je agregovat události do dočasných intervalů nebo okna. Pokud chcete například spočítat počet příspěvků sociálních médií za minutu nebo vypočítat průměrné srážky za hodinu.
Azure Stream Analytics zahrnuje nativní podporu pěti druhů časových okenních funkcí. Tyto funkce umožňují definovat časové intervaly, do kterých se data agregují v dotazu. Podporované funkce oken jsou přeskakující, , posuvné, relacea snímek.
Převracení
Klouzající okenní funkce segmentují datový proud do souvislé řady nepřekrývajících se časových segmentů s pevnou velikostí a na nich provádějí operace. Události nemůžou patřit do více než jednoho přeskakujícího okna.
Příklad přeskakujícího okna reprezentovaný následujícím dotazem vyhledá maximální hodnotu čtení v každém minutovém okně. Funkce oken se použijí v úlohách Stream Analytics pomocí klauzule GROUP BY syntaxe dotazu. Klauzule GROUP BY
v následujícím dotazu obsahuje funkci TumblingWindow()
, která určuje jednominutovou velikost okna.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)
Poskakování
Skokové model funkcí plánovaných překrývajících se oken, které přeskočí kupředu v čase o pevné období. Je nejjednodušší si je představit jako přeskakující okna, která se můžou překrývat a generovat častěji než velikost okna. Ve skutečnosti jsou překlápěcí okna jednoduše skákajícím oknem, jehož hop
je rovno jeho size
. Při použití přeskakujících oken mohou události patřit do více než jedné výsledkové množiny.
Chcete-li vytvořit skákající okno, musíte zadat tři parametry. První parametr označuje časovou jednotku, například sekundu, minutu nebo hodinu. Následující parametr nastaví velikost okna, která určuje, jak dlouho každé okno trvá. Posledním povinným parametrem je velikost kroku, která určuje, o kolik se jednotlivá okna posunou dopředu oproti předchozímu. Lze také použít volitelný čtvrtý parametr označující velikost posunu.
Následující dotaz ukazuje použití HoppingWindow()
, kde je timeunit
nastavena na second
.
windowsize
je 60 sekund a hopsize
je 30 sekund. Tento dotaz vypíše událost každých 30 sekund obsahující maximální hodnotu čtení, ke které došlo za posledních 60 sekund.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)
Klouzání
posuvné okna generují události pro body v čase, když se obsah okna skutečně změní. Tento model funkcí omezuje počet oken, která je potřeba zvážit. Azure Stream Analytics vypíše události pouze pro ty body v čase, kdy událost vstoupila nebo ukončila okno. Každé okno proto obsahuje minimálně jednu událost. Události v posuvných oknech mohou patřit do několika posuvných oken, podobně jako skákající okna.
Následující dotaz používá funkci SlidingWindow()
k vyhledání maximální hodnoty čtení v každém minutovém okně, ve kterém došlo k události.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)
Sezení
Relace funkce okna seskupují události, které přicházejí v podobných časech, a vyfiltrují dobu, kdy nejsou k dispozici žádná data. Má tři primární parametry: časový limit, maximální dobu trvání a klíč dělení (volitelné).
Výskyt první události spustí okno relace. Předpokládejme, že v rámci zadaného časového limitu od poslední ingestované události dojde k jiné události. V takovém případě se okno rozšíří tak, aby zahrnovalo novou událost. Pokud však v zadaném časovém limitu nedojde k žádným jiným událostem, okno se po uplynutí této doby zavře. Pokud události probíhají během zadaného časového limitu, okno relace se prodlouží až do dosažení maximální doby trvání.
Následující dotaz měří délku uživatelské relace vytvořením SessionWindow
nad clickstreamovými daty, přičemž timeoutsize
je 20 sekund a maximumdurationsize
je 60 sekund.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)
Snímek
Snapshot windows seskupí události podle stejných hodnot časového razítka. Na rozdíl od jiných typů oken není vyžadována konkrétní funkce okna. Okno snímku můžete použít zadáním funkce System.Timestamp()
do klauzule GROUP BY
dotazu.
Následující dotaz například najde maximální hodnotu čtení událostí, ke kterým dochází přesně ve stejnou dobu.
SELECT System.TimeStamp() AS WindowTime,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()
System.Timestamp()
se v klauzuli GROUP BY
považuje za definici okna snímku, protože seskupuje události do okna na základě rovnosti časových razítek.