Windows (Azure Stream Analytics)
Fönster ger ett sätt att aggregera händelser över olika tidsintervall beroende på specifika fönsterdefinitioner. Det finns fyra typer av temporala fönster att välja mellan: Tumbling, Hopping, Sliding och Session.
Funktionen Windows() utökar det här konceptet till att samtidigt beräkna resultat av flera olika fönsterdefinitioner. Med funktionen Windows() kan du ange mer än en fönsterdefinition. Frågelogiken beräknas för var och en av dessa fönsterdefinitioner och resultatet är en union av alla fönsterresultat.
Eftersom resultatet av funktionen Windows() innehåller en kombination av flera fönster måste du skilja mellan de olika resultaten. Detta görs genom att tilldela en identitet till varje fönster som kan nås med systemfunktionen System.Window(). Id. System.Window() returnerar en post med ID:t som fält.
Det finns två sätt att definiera Windows:
Tilldela unika identiteter med funktionen Window(),Window ( ID , window_definition ), där ID är en identitet för window_definition och är ett unikt skiftlägesokänsligt varchar(max) -värde i Windows-konstruktionen.
Utan identiteter, i vilket fall System.Window(). ID resulterar i null-värde.
Syntax
| Windows ( window_definition, … )
| Windows ( Window ( id , window_definition ), … )
window_definition =
| HoppingWindow ( …
| TumblingWindow ( …
| SlidingWindow ( …
| SessionWindow ( …
| Hopping ( …
| Tumbling ( …
| Sliding ( …
| Session ( …
Anteckning
Det går inte att kapsla Windows-konstruktionerna. Identiteter måste antingen ges till alla fönsterdefinitioner eller ges till ingen.
Det finns förkortade fönsterdefinitionsnamn, till exempel "Tumbling", som kan användas i Windows() för att undvika upprepning av ordet "fönster" som i Windows(Window('MyWindow', TumblingWindow(…
. De förkortade namnen kan också användas utanför Windows-konstruktionen.
Det är inte ett fel att använda System.Window(). ID utan Windows-konstruktionen, men dess värde är null eftersom ingen identitet angavs i fönstret.
Om fönsterdefinitioner anges med funktionen Window() måste alla fönsterdefinitioner använda funktionen Window() och alla skiftlägesokänsliga ID:t måste vara unika. Null är inte tillåtet.
System.Window()-funktion
Funktionen System.Window() kan bara användas i SELECT-satsen i GROUP BY-instruktionen för att hämta metadata om tidsfönstret för gruppering.
Funktionen returnerar ett värde av typen Post som innehåller ett enda fält-ID, som innehåller identiteten för fönstret som händelsen tillhör.
Exempel
Skapa fönster för att räkna bilar för var och en av varaktigheterna 10, 20, 30, 40, 50 och 60 minuter utan fönsteridentitet.
SELECT
TollId,
COUNT(*)
FROM Input TIMESTAMP BY EntryTime
GROUP BY
TollId,
Windows(
TumblingWindow(minute, 10),
TumblingWindow(minute, 20),
TumblingWindow(minute, 30),
TumblingWindow(minute, 40),
TumblingWindow(minute, 50),
TumblingWindow(minute, 60))
Skapa fönster med ett hopp på 1 minut och fyra olika varaktigheter – 1 min, 15 min, 30 min och 60 min.
SELECT
System.Window().Id,
TollId,
COUNT(*)
FROM Input TIMESTAMP BY EntryTime
GROUP BY
TollId,
Windows(
Window('1 min', TumblingWindow(minute, 1)),
Window('15 min', HoppingWindow(minute, 15, 1)),
Window('30 min', HoppingWindow(minute, 30, 1)),
Window('60 min', HoppingWindow(minute, 60, 1)))
Skapa fönster med olika storlekar och filtrera resultat baserat på den fönstervaraktighet som anges i referenstabellen.
WITH HoppingWindowResults AS
(
SELECT
System.Window().Id,
TollId,
COUNT(*)
FROM Input TIMESTAMP BY EntryTime
GROUP BY
TollId,
Windows(
Window('H10', Hopping(minute, 10, 5)),
Window('H20', Hopping(minute, 20, 5)),
Window('H30', Hopping(minute, 30, 5)),
Window('H40', Hopping(minute, 40, 5)),
Window('H50', Hopping(minute, 50, 5)),
Window('H60', Hopping(minute, 60, 5)))
)
SELECT HoppingWindowResults.*
FROM HoppingWindowResults
JOIN ReferenceTable ON
HoppingWindowResults.TollId = ReferenceTable.TollId
AND HoppingWindowResults.Id = ReferenceTable.windowId