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

Omlottfönsterfunktioner segmenterar en dataström i en sammanhängande serie av icke-överlappande tidssegment av fast storlek, som sedan arbetar med dem. Händelser kan inte tillhöra fler än ett rullande fönster.

Ett diagram som illustrerar en ström med en serie händelser mappade till 1 minuts 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. Satsen GROUP BY i följande fråga innehåller funktionen TumblingWindow(), 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)

Hoppa

Hoppande fönsterfunktioner modellerar schemalagda överlappande fönster och rör sig framåt i tiden med en fast tidsperiod. 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.

Diagrammet illustrerar en ström med en serie händelser insamlade i 60 sekunders hoppande fönster som inträffar var 30:e sekund.

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älld på second. windowsize är 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)

Skjutbar

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 genererar händelser endast för de tidpunkter en händelse träder in i eller lämnar tidsfö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.

Diagrammet illustrerar en ström med en serie händelser mappade i glidande fönster på 1 minut.

I följande fråga används funktionen SlidingWindow() 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)

Sittning

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

Diagrammet illustrerar en ström med en serie händelser som mappats till sessionsfönster med en tidsgräns på 20 sekunder och en maximal varaktighet på 60 sekunder.

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 en SessionWindow över klickströmsdata med en timeoutsize på 20 sekunder och en maximumdurationsize på 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

Ögonblicksfönster grupperar händelser efter 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 ange funktionen System.Timestamp() i frågans GROUP BY-sats.

Diagrammet illustrerar en ström med en serie händelser mappade till ögonblicksbildsfönster.

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.