Úvod do funkcí pro vytváření oken Stream Analytics
V scénářích streamování času je provádění operací s daty obsaženými v časových oknech běžným vzorem. Stream Analytics má nativní podporu funkcí pro práci s okny, což vývojářům umožňuje vytvářet složité úlohy zpracování datových proudů s minimálním úsilím.
Existuje pět druhů časových oken, ze které si můžete vybrat:
Funkce okna použijete v klauzuli GROUP BY syntaxe dotazu v úlohách Stream Analytics. Pomocí funkce Windows() můžete také agregovat události v několika oknech.
Všechny operace vytváření oken vypíše výsledky na konci okna. Když spustíte úlohu Stream Analytics, můžete zadat čas spuštění výstupu úlohy a systém automaticky načte předchozí události v příchozích datových proudech tak, aby výstupem prvního okna v zadané době, například když začnete s možností Now , začne okamžitě generovat data. Výstupem okna bude jedna událost založená na použité agregační funkci. Výstupní událost má časové razítko konce okna a všechny funkce okna jsou definovány s pevnou délkou.
Přeskakující okno
Pomocí funkcí pro přeskakující okno můžete segmentovat datový proud do různých časových segmentů a provádět proti nim funkci.
Klíčovými rozdíly pro přeskakující okno jsou:
- Neopakují se.
- Nepřekrývají se.
- Událost nemůže patřit do více než jednoho přeskakujícího okna.
Tady jsou vstupní data pro příklad:
Kolek | CreatedAt | Časové pásmo |
---|---|---|
0 | 2021-10-26T10:15:01 | PST |
5 | 2021-10-26T10:15:03 | PST |
4 | 2021-10-26T10:15:06 | PST |
... | ... | ... |
Tady je ukázkový dotaz:
SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)
Tady je ukázkový výstup:
WindowEndTime | Časové pásmo | Počet |
---|---|---|
2021-10-26T10:15:10 | PST | 5 |
2021-10-26T10:15:20 | PST | 2 |
2021-10-26T10:15:30 | PST | 4 |
Skákání okna
Funkce skákající okna se posunou dopředu o pevné období. Může být snadné si je představit jako přeskakující okna, která se můžou překrývat a generovat častěji než velikost okna. Události můžou patřit do více než jedné sady výsledků okna skákání. Pokud chcete, aby okno přeskakování bylo stejné jako přeskakující okno, zadejte velikost segmentu směrování, která bude stejná jako velikost okna.
Tady jsou ukázková data:
Kolek | CreatedAt | Téma |
---|---|---|
0 | 2021-10-26T10:15:01 | Streamování |
5 | 2021-10-26T10:15:03 | Streamování |
4 | 2021-10-26T10:15:06 | Streamování |
... | ... | ... |
Tady je ukázkový dotaz:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)
Tady je ukázkový výstup:
WindowEndTime | Téma | Počet |
---|---|---|
2021-10-26T10:15:10 | Streamování | 5 |
2021-10-26T10:15:15 | Streamování | 3 |
2021-10-26T10:15:20 | Streamování | 2 |
2021-10-26T10:15:25 | Streamování | 4 |
2021-10-26T10:15:30 | Streamování | 4 |
Posuvné okno
Posuvná okna, na rozdíl od přeskakování nebo přeskakování oken, výstupní události pouze pro body v čase, kdy se obsah okna skutečně změní. Jinými slovy, když událost vstoupí nebo ukončí okno. Takže každé okno má aspoň jednu událost. Podobně jako skákání oken můžou události patřit do více než jednoho posuvného okna.
Tady jsou ukázková vstupní data:
Kolek | CreatedAt | Téma |
---|---|---|
0 | 2021-10-26T10:15:10 | Streamování |
5 | 2021-10-26T10:15:12 | Streamování |
9 | 2021-10-26T10:15:15 | Streamování |
7 | 2021-10-26T10:15:15 | Streamování |
8 | 2021-10-26T10:15:27 | Streamování |
Tady je ukázkový dotaz:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3
Výstup:
WindowEndTime | Téma | Počet |
---|---|---|
2021-10-26T10:15:15 | Streamování | 4 |
2021-10-26T10:15:20 | Streamování | 3 |
Okno relace
Funkce okna relace seskupují události, které přicházejí v podobných časech, a vyfiltrují období, kdy nejsou k dispozici žádná data. Má tři hlavní parametry:
- Timeout
- Maximální doba trvání
- Klíč dělení (volitelné)
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 stále vyskytují v zadaném časovém limitu, okno relace se bude rozšiřovat až do dosažení maximální doby trvání. 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í v t = 0, 10, 20, 30 atd.
Pokud je k dispozici klíč oddílu, události se seskupí podle klíče a okna relace se u každé skupiny nezávisle. Toto dělení je užitečné v případech, kdy potřebujete různá okna relací pro různé uživatele nebo zařízení.
Tady jsou ukázková vstupní data:
Kolek | CreatedAt | Téma |
---|---|---|
0 | 2021-10-26T10:15:01 | Streamování |
2 | 2021-10-26T10:15:04 | Streamování |
3 | 2021-10-26T10:15:13 | Streamování |
... | ... | ... |
Tady je ukázkový dotaz:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)
Výstup:
WindowEndTime | Téma | Počet |
---|---|---|
2021-10-26T10:15:09 | Streamování | 2 |
2021-10-26T10:15:24 | Streamování | 4 |
2021-10-26T10:15:31 | Streamování | 2 |
2021-10-26T10:15:39 | Streamování | 0 |
Okno Snímek
Události skupiny snímků , které mají stejné časové razítko Na rozdíl od jiných typů oken, které vyžadují konkrétní funkci okna (například SessionWindow()), můžete okno snímku použít přidáním System.Timestamp() do klauzule GROUP BY.
Tady jsou ukázková vstupní data:
Kolek | CreatedAt | Téma |
---|---|---|
0 | 2021-10-26T10:15:04 | Streamování |
2 | 2021-10-26T10:15:04 | Streamování |
3 | 2021-10-26T10:15:04 | Streamování |
... | ... | ... |
Tady je ukázkový dotaz:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
Tady je ukázkový výstup:
WindowEndTime | Téma | Počet |
---|---|---|
2021-10-26T10:15:04 | Streamování | 4 |
2021-10-26T10:15:10 | Streamování | 2 |
2021-10-26T10:15:13 | Streamování | 0 |
2021-10-26T10:15:22 | Streamování | 2 |
Další kroky
Podívejte se na následující články: