Förstå fönsterfunktioner
Ett vanligt mål med dataströmbearbetning är att aggregera händelser i tidsintervall eller fönster. Till exempel för att räkna antalet inlägg på sociala medier per minut eller för att beräkna den genomsnittliga nederbörden per timme.
Azure Stream Analytics har inbyggt stöd för fem typer av tidsmässiga fönsterfunktioner. Med de här funktionerna kan du definiera tidsintervall i vilka data aggregeras i en fråga. De fönsterfunktioner som stöds är Tumbling, Hopping, Sliding, Session och Snapshot.
Tumlande
Rullande fönsterfunktioner segmentera en dataström i en sammanhängande serie med segment med fast storlek, icke-överlappande tid och arbeta mot dem. Händelser kan inte tillhöra fler än ett rullande fönster.
Exemplet med rullande fönster, som representeras av följande fråga, hittar det maximala läsvärdet i varje minutfönster. Fönsterfunktioner används i Stream Analytics-jobb med hjälp av GROUP BY-satsen i frågesyntaxen. GROUP BY
Satsen i följande fråga innehåller TumblingWindow()
funktionen, som anger en fönsterstorlek på en minut.
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)
Hopping
Hoppande fönsterfunktioner modellerar schemalagda överlappande fönster, hoppar framåt i tiden med en fast period. Det är enklast att se dem som rullande fönster som kan överlappa och genereras oftare än fönsterstorleken. Faktum är att rullande fönster helt enkelt är ett hoppande fönster vars hop
är lika med dess size
. När du använder Hopping-fönster kan händelser tillhöra mer än en fönsterresultatuppsättning.
Om du vill skapa ett hoppfönster måste du ange tre parametrar. Den första parametern anger tidsenheten, till exempel sekund, minut eller timme. Följande parameter anger fönsterstorleken, som anger hur länge varje fönster varar. Den sista obligatoriska parametern är hoppstorleken, som anger hur mycket varje fönster flyttas framåt i förhållande till föregående. En valfri fjärde parameter som anger förskjutningsstorleken kan också användas.
Följande fråga visar hur du använder en HoppingWindow()
där timeunit
är inställt på second
. Är windowsize
60 sekunder och hopsize
är 30 sekunder. Den här frågan matar ut en händelse var 30:e sekund som innehåller det maximala läsvärdet som har inträffat under de senaste 60 sekunderna.
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)
Glidande
Skjutfönster genererar händelser för tidpunkter när innehållet i fönstret faktiskt ändras. Den här funktionsmodellen begränsar antalet fönster som behöver beaktas. Azure Stream Analytics matar ut händelser endast för de tidpunkter då en händelse har angetts eller avslutat fönstret. Därför innehåller varje fönster minst en händelse. Händelser i skjutbara fönster kan tillhöra mer än ett skjutfönster, ungefär som Hopping-fönster.
I följande fråga används SlidingWindow()
funktionen för att hitta det maximala läsvärdet i varje minuts fönster där en händelse inträffade.
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)
Session
Sessionsfönstret fungerar tillsammans med händelser som anländer vid liknande tidpunkter och filtrerar bort tidsperioder där det inte finns några data. Den har tre primära parametrar: timeout, maximal varaktighet och partitioneringsnyckel (valfritt).
Förekomsten av den första händelsen startar ett sessionsfönster. Anta att en annan händelse inträffar inom den angivna tidsgränsen från den senaste inmatade händelsen. I så fall utökas fönstret för att införliva den nya händelsen. Men om inga andra händelser inträffar inom den angivna tidsgränsen stängs fönstret vid tidsgränsen. Om händelser fortsätter att inträffa inom den angivna tidsgränsen utökas sessionsfönstret tills den maximala varaktigheten har uppnåtts.
Följande fråga mäter användarens sessionslängd genom att skapa data SessionWindow
över klickström med timeoutsize
20 sekunder och maximumdurationsize
60 sekunder.
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)
Ögonblicksbild
Ögonblicksbilder av windows grupperar händelser med identiska tidsstämpelvärden. Till skillnad från andra fönstertyper krävs ingen specifik fönsterfunktion. Du kan använda ett ögonblicksbildsfönster genom att System.Timestamp()
ange funktionen till frågesatsen GROUP BY
.
Följande fråga hittar till exempel det maximala läsvärdet för händelser som inträffar exakt samtidigt.
SELECT System.TimeStamp() AS WindowTime,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()
System.Timestamp()
betraktas i GROUP BY
-satsen som en definition av ögonblicksbildsfönstret eftersom den grupperar händelser i ett fönster baserat på likheten mellan tidsstämplar.