Förstå fönsterfunktioner

Slutförd

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.

A diagram illustrating a stream with a series of events mapped into 1-minute tumbling windows.

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.

The diagram illustrates a stream with a series of events captured in 60 second hopping windows that occur every 30 seconds.

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.

The diagram illustrates a stream with a series of events mapped into sliding windows of 1 minute.

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

The diagram illustrates a stream with a series of events mapped into session windows with a 20-second timeout and a maximum duration of 60 seconds.

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 .

The diagram illustrates a stream with a series of events mapped into snapshot windows.

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.