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.

Diagram that shows the concept of Stream Analytics window functions.

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.

Diagram that shows an example Stream Analytics tumbling window.

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.

Diagram that shows an example of the hopping window.

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.

Diagram that shows an example of a sliding window.

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).

Diagram that shows a sample Stream Analytics session window.

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.

Diagram that shows a sample Steam Analytics snapshot window.

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: