Introduktion till Stream Analytics fönsterfunktioner
I tidsströmningsscenarier är det vanligt att utföra åtgärder på data som finns i tidsbaserade 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 tidsfönster att välja mellan: fönsterför rullande fönster, hoppandefönster, glidandefönster, sessioner och ögonblicksbilder. Du använder fönsterfunktionerna i GROUP BY-satsen i frågesyntaxen i dina Stream Analytics jobb. Du kan också aggregera händelser över flera fönster med hjälp av Windows()-funktionen.
Alla fönsteråtgärders utdataresultat i slutet av fönstret. Observera att när du startar ett Stream Analytics-jobb kan du ange starttiden för jobbutdata så hämtar systemet automatiskt tidigare händelser i inkommande dataströmmar för att mata ut det första fönstret vid den angivna tiden. När du till exempel börjar med alternativet Nu börjar den generera data omedelbart. Utdata från fönstret är en enskild händelse baserat på den mängdfunktion som används. Utdatahändelsen har tidsstämpeln i slutet av fönstret och alla fönsterfunktioner definieras med en fast längd.

Rullande fönster
Funktioner för rullande fönster används för att segmentera en dataström i distinkta tidssegment och utföra en funktion mot dem, till exempel exemplet nedan. Viktiga egenskaper i ett rullande fönster är att de upprepas i stället för att överlappa varandra, samt att en händelse inte kan tillhöra mer än ett rullande fönster.

Med följande indata (visas ovan):
| Stämpel | CreatedAt | TimeZone |
|---|---|---|
| 1 | 2021-10-26T10:15:01 | PST |
| 5 | 2021-10-26T10:15:03 | PST |
| 4 | 2021-10-26T10:15:06 | PST |
| ... | ... | ... |
Följande fråga:
SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)
Returnerar:
| WindowEndTime | TimeZone | 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 tänka på dem som rullande fönster som kan överlappa och genereras oftare än fönsterstorleken. Händelser kan tillhöra mer än en resultatuppsättning för hoppande fönster. Om du vill göra ett hoppande fönster detsamma som ett rullande fönster anger du att hoppstorleken ska vara samma som fönsterstorleken.

Med följande indata (visas ovan):
| Stämpel | CreatedAt | Avsnitt |
|---|---|---|
| 1 | 2021-10-26T10:15:01 | Strömning |
| 5 | 2021-10-26T10:15:03 | Strömning |
| 4 | 2021-10-26T10:15:06 | Strömning |
| ... | ... | ... |
Följande fråga:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)
Returnerar:
| WindowEndTime | Avsnitt | 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
Skjutfönster, till skillnad från rullande fönster eller hoppande fönster, matar endast ut händelser för tidpunkter när innehållet i fönstret faktiskt ändras. Det vill säga när en händelse kommer in i eller lämnar fönstret. Varje fönster har alltså minst en händelse. Händelser kan tillhöra fler än ett skjutfönster, ungefär som hoppande fönster.

Med följande indata (visas ovan):
| Stämpel | CreatedAt | Avsnitt |
|---|---|---|
| 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 |
Följande fråga:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3
Returnerar:
| WindowEndTime | Avsnitt | Antal |
|---|---|---|
| 2021-10-26T10:15:15 | Strömning | 4 |
| 2021-10-26T10:15:20 | Strömning | 3 |
Sessionsfönster
Sessionsfönstrets funktioner grupperar händelser som tas emot vid liknande tidpunkter och filtrerar bort tidsperioder där det inte finns några data. Den har tre huvudsakliga parametrar: timeout, maximal tidslängd och 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 senast ingestade händelsen utökas fönstret med den nya händelsen. Om inga händelser inträffar inom tidsgränsen stängs fönstret vid tidsgränsen.
Om händelser fortsätter att inträffa inom den angivna tidsgränsen fortsätter sessionsfönstret att utökas tills den maximala varaktigheten nås. Intervallen för kontroll av maximal varaktighet anges till samma storlek som den angivna maximala varaktigheten. Om den maximala varaktigheten till exempel är 10 kontrolleras om perioden överskrider den maximala varaktigheten vid t = 0, 10, 20, 30 osv.
När en partitionsnyckel anges grupperas händelserna tillsammans med nyckeln och sessionsfönstret tillämpas på varje grupp oberoende av varandra. Den här partitionering är användbar för fall där du behöver olika sessionsfönster för olika användare eller enheter.
Med följande indata (visas ovan):
| Stämpel | CreatedAt | Avsnitt |
|---|---|---|
| 1 | 2021-10-26T10:15:01 | Strömning |
| 2 | 2021-10-26T10:15:04 | Strömning |
| 3 | 2021-10-26T10:15:13 | Strömning |
| ... | ... | ... |
Följande fråga:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)
Returnerar:
| WindowEndTime | Avsnitt | 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
Ögonblicksbilder 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 tillämpa ett ögonblicksbildsfönster genom att lägga till System.Timestamp() till GROUP BY-satsen.

Med följande indata (visas ovan):
| Stämpel | CreatedAt | Avsnitt |
|---|---|---|
| 1 | 2021-10-26T10:15:04 | Strömning |
| 2 | 2021-10-26T10:15:04 | Strömning |
| 3 | 2021-10-26T10:15:04 | Strömning |
| ... | ... | ... |
Följande fråga:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
Returnerar:
| WindowEndTime | Avsnitt | 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 |