Introduktion till Stream Analytics-fönsterfunktioner
I scenarier med tidsuppspelning är det ett vanligt mönster att utföra åtgärder på data som finns i temporala fönster. Stream Analytics har inbyggt stöd för fönsterfunktioner, vilket gör det möjligt för utvecklare att skapa komplexa dataströmbearbetningsjobb med minimal ansträngning.
Det finns fem typer av temporala fönster att välja mellan:
Du använder fönsterfunktionerna i GROUP BY-satsen för frågesyntaxen i dina Stream Analytics-jobb. Du kan också aggregera händelser över flera fönster med hjälp av funktionen Windows().
Alla fönsteråtgärder utdataresultat i slutet av fönstret. När du startar ett stream analytics-jobb kan du ange starttiden för jobbutdata och systemet hämtar automatiskt tidigare händelser i inkommande strömmar för att mata ut det första fönstret vid den angivna tidpunkten. När du till exempel börjar med alternativet Nu börjar det generera data omedelbart. Utdata från fönstret blir en enskild händelse baserat på den mängdfunktion som används. Utdatahändelsen har tidsstämpeln för slutet av fönstret och alla fönsterfunktioner definieras med en fast längd.
Rullande fönster
Använd funktioner för rullande fönster för att segmentera en dataström i distinkta tidssegment och utföra en funktion mot dem.
De viktigaste differentiatorerna i ett rullande fönster är:
- De upprepar sig inte.
- De överlappar inte.
- En händelse kan inte tillhöra fler än ett rullande fönster.
Här är indata för exemplet:
Stämpel | CreatedAt | Tidszon |
---|---|---|
1 | 2021-10-26T10:15:01 | PST |
5 | 2021-10-26T10:15:03 | PST |
4 | 2021-10-26T10:15:06 | PST |
... | ... | ... |
Här är exempelfrågan:
SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)
Här är exempelutdata:
WindowEndTime | Tidszon | Antal |
---|---|---|
2021-10-26T10:15:10 | PST | 5 |
2021-10-26T10:15:20 | PST | 2 |
2021-10-26T10:15:30 | PST | 4 |
Hoppande fönster
Hoppande fönsterfunktioner hoppar framåt i tiden med en fast period. Det kan vara lätt att se dem som rullande fönster som kan överlappa och genereras oftare än fönsterstorleken. Händelser kan tillhöra mer än en hoppningsfönsterresultatuppsättning. Om du vill göra ett Hopping-fönster till samma som ett rullande fönster anger du hoppstorleken som ska vara samma som fönsterstorleken.
Här är exempeldata:
Stämpel | CreatedAt | Område |
---|---|---|
1 | 2021-10-26T10:15:01 | Strömning |
5 | 2021-10-26T10:15:03 | Strömning |
4 | 2021-10-26T10:15:06 | Strömning |
... | ... | ... |
Här är exempelfrågan:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)
Här är exempelutdata:
WindowEndTime | Område | Antal |
---|---|---|
2021-10-26T10:15:10 | Strömning | 5 |
2021-10-26T10:15:15 | Strömning | 3 |
2021-10-26T10:15:20 | Strömning | 2 |
2021-10-26T10:15:25 | Strömning | 4 |
2021-10-26T10:15:30 | Strömning | 4 |
Skjutfönster
Skjutbara fönster, till skillnad från rullande eller hoppande fönster, matar ut händelser endast för tidpunkter då innehållet i fönstret faktiskt ändras. Med andra ord när en händelse kommer in i eller avslutar fönstret. Så varje fönster har minst en händelse. På samma sätt som hoppande fönster kan händelser tillhöra mer än ett skjutfönster.
Här är exempeldata för indata:
Stämpel | CreatedAt | Område |
---|---|---|
1 | 2021-10-26T10:15:10 | Strömning |
5 | 2021-10-26T10:15:12 | Strömning |
9 | 2021-10-26T10:15:15 | Strömning |
7 | 2021-10-26T10:15:15 | Strömning |
8 | 2021-10-26T10:15:27 | Strömning |
Här är exempelfrågan:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3
Utdata:
WindowEndTime | Område | Antal |
---|---|---|
2021-10-26T10:15:15 | Strömning | 4 |
2021-10-26T10:15:20 | Strömning | 3 |
Sessionsfönster
Sessionsfönstret fungerar grupphändelser som anländer vid liknande tidpunkter och filtrerar bort tidsperioder där det inte finns några data. Den har tre huvudparametrar:
- Timeout
- Maximal varaktighet
- Partitioneringsnyckel (valfritt).
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 inträffa inom den angivna tidsgränsen fortsätter sessionsfönstret att förlängas tills den maximala varaktigheten har uppnåtts. De maximala varaktighetskontrollintervallen är inställda på samma storlek som den angivna maximala varaktigheten. Om den maximala varaktigheten till exempel är 10 kontrolleras om fönstret överskrider den maximala varaktigheten vid t = 0, 10, 20, 30 osv.
När en partitionsnyckel tillhandahålls grupperas händelserna efter nyckeln och sessionsfönstret tillämpas separat på varje grupp. Den här partitioneringen är användbar i fall där du behöver olika sessionsfönster för olika användare eller enheter.
Här är exempeldata för indata:
Stämpel | CreatedAt | Område |
---|---|---|
1 | 2021-10-26T10:15:01 | Strömning |
2 | 2021-10-26T10:15:04 | Strömning |
3 | 2021-10-26T10:15:13 | Strömning |
... | ... | ... |
Här är exempelfrågan:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)
Utdata:
WindowEndTime | Område | Antal |
---|---|---|
2021-10-26T10:15:09 | Strömning | 2 |
2021-10-26T10:15:24 | Strömning | 4 |
2021-10-26T10:15:31 | Strömning | 2 |
2021-10-26T10:15:39 | Strömning | 1 |
Fönstret Ögonblicksbild
Ögonblicksbild av windows-grupphändelser som har samma tidsstämpel. Till skillnad från andra fönstertyper, som kräver en specifik fönsterfunktion (till exempel SessionWindow()), kan du använda ett ögonblicksbildsfönster genom att lägga till System.Timestamp() i GROUP BY-satsen.
Här är exempeldata för indata:
Stämpel | CreatedAt | Område |
---|---|---|
1 | 2021-10-26T10:15:04 | Strömning |
2 | 2021-10-26T10:15:04 | Strömning |
3 | 2021-10-26T10:15:04 | Strömning |
... | ... | ... |
Här är exempelfrågan:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
Här är exempelutdata:
WindowEndTime | Område | Antal |
---|---|---|
2021-10-26T10:15:04 | Strömning | 4 |
2021-10-26T10:15:10 | Strömning | 2 |
2021-10-26T10:15:13 | Strömning | 1 |
2021-10-26T10:15:22 | Strömning | 2 |
Nästa steg
Mer information finns i följande artiklar: