Dela via


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  

Se även