Windows (Azure Stream Analytics)

Die Fensterfunktion bietet eine Möglichkeit, Ereignisse über verschiedene Zeitintervalle zu aggregieren, abhängig von bestimmten Fensterdefinitionen. Es stehen vier Arten von temporalen Fenstern zur Auswahl: Tumbling, Hopping, Sliding und Session.

Die Windows() -Funktion erweitert dieses Konzept, um gleichzeitig Ergebnisse mehrerer verschiedener Fensterdefinitionen zu berechnen. Mit der Windows() -Funktion können Sie mehrere Fensterdefinitionen angeben. Die Abfragelogik wird für jede dieser Fensterdefinitionen berechnet, und das Ergebnis ist eine Vereinigung aller Fensterergebnisse.

Da das Ergebnis der Windows() -Funktion eine Kombination aus mehreren Fenstern enthält, müssen Sie zwischen den verschiedenen Ergebnissen unterscheiden. Dies erfolgt durch Zuweisen einer Identität zu jedem Fenster, auf das über die Systemfunktion System.Window() zugegriffen werden kann. Id. System.Window() gibt einen Datensatz mit der ID als Feld zurück.

Es gibt zwei Möglichkeiten, Windows zu definieren:

  • Weisen Sie eindeutige Identitäten mithilfe der Window() -Funktion Window ( ID , window_definition ) zu, wobei ID eine Identität von window_definition ist und ein eindeutiger varchar(max) -Wert ohne Beachtung der Groß-/Kleinschreibung innerhalb des Windows-Konstrukts ist.

  • Ohne Identitäten, in diesem Fall System.Window(). Id führt zu EINEM NULL-Wert.

Syntax

| Windows ( window_definition, … ) 
| Windows ( Window ( id , window_definition ), … ) 
 
window_definition = 
| HoppingWindow ( … 
| TumblingWindow ( … 
| SlidingWindow ( … 
| SessionWindow ( … 
| Hopping ( … 
| Tumbling ( … 
| Sliding ( … 
| Session ( …  
  

Hinweis

Die Windows-Konstrukte können nicht geschachtelt werden. Identitäten müssen entweder allen Fensterdefinitionen oder keiner zugewiesen werden.

Es gibt verkürzte Fensterdefinitionsnamen, z. B. "Tumbling", die in Windows() verwendet werden können, um wiederholungen des Worts "window" wie in Windows(Window('MyWindow', TumblingWindow(…zu vermeiden. Die verkürzten Namen können auch außerhalb des Windows-Konstrukts verwendet werden.

Die Verwendung von System.Window() ist kein Fehler. Id ohne das Windows-Konstrukt, sein Wert ist jedoch NULL, da dem Fenster keine Identität zugewiesen wurde.

Wenn Fensterdefinitionen mithilfe der Window() -Funktion angegeben werden, müssen alle Fensterdefinitionen die Window() -Funktion verwenden, und alle IDs ohne Beachtung der Groß-/Kleinschreibung müssen eindeutig sein. Null ist nicht zulässig.

System.Window()-Funktion

Die System.Window()- Funktion kann nur in der SELECT-Klausel der GROUP BY-Anweisung verwendet werden, um Metadaten zum Gruppierungszeitfenster abzurufen.

Die Funktion gibt einen Wert vom Typ Record zurück, der eine einzelne Feld-ID enthält, die die Identität des Fensters enthält, zu dem das Ereignis gehört.

Beispiele

Erstellen Sie ein Fenster zum Zählen von Autos für die dauer 10, 20, 30, 40, 50 und 60 Minuten ohne Fensteridentität.

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

Erstellen Sie Fenster mit einem Hop von 1 Minute und vier unterschiedlichen Daueren : 1 Min., 15 Min., 30 min und 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))) 

Erstellen Sie Fenster unterschiedlicher Größe, und filtern Sie Die Ergebnisse basierend auf der in der Tabelle Verweis angegebenen Fensterdauer.

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  

Weitere Informationen