Share via


Windows (Azure Stream Analytics)

Windowing biedt een manier om gebeurtenissen over verschillende tijdsintervallen samen te voegen, afhankelijk van specifieke vensterdefinities. Er zijn vier soorten tijdelijke vensters waaruit u kunt kiezen: Tumbling, Hopping, Sliding en Session.

De functie Windows() breidt dit concept uit om gelijktijdig resultaten van meerdere verschillende vensterdefinities te berekenen. Met de functie Windows() kunt u meer dan één vensterdefinitie opgeven. De querylogica wordt berekend voor elk van deze vensterdefinities en het resultaat is een samenvoeging van alle vensterresultaten.

Omdat het resultaat van de functie Windows() een combinatie van meerdere vensters bevat, moet u onderscheid maken tussen de verschillende resultaten. Dit wordt gedaan door een identiteit toe te wijzen aan elk venster dat kan worden geopend met behulp van de systeemfunctie System.Window(). Id. System.Window() retourneert een record met de id als veld.

Er zijn twee manieren om Windows te definiëren:

  • Wijs unieke identiteiten toe met behulp van de functie Window(),Window ( ID , window_definition ), waarbij ID een identiteit is van window_definition en een unieke, niet-hoofdlettergevoelige varchar(max) -waarde binnen de Windows-constructie is.

  • Zonder identiteiten, in dat geval System.Window(). Id resulteert in een null-waarde.

Syntax

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

Notitie

De Windows-constructies kunnen niet worden genest. Identiteiten moeten worden opgegeven aan alle vensterdefinities of aan geen enkele.

Er zijn verkorte vensterdefinitienamen, zoals 'Tumbling', die in Windows() kunnen worden gebruikt om herhaling van het woord 'venster' te voorkomen, zoals in Windows(Window('MyWindow', TumblingWindow(…. De verkorte namen kunnen ook buiten de Windows-constructie worden gebruikt.

Het is geen fout om System.Window() te gebruiken. Id zonder de Windows-constructie, maar de waarde is null omdat er geen identiteit is opgegeven aan het venster.

Als vensterdefinities worden opgegeven met behulp van de functie Window(), moeten alle vensterdefinities de functie Window() gebruiken en moeten alle niet-hoofdlettergevoelige id's uniek zijn. Null is niet toegestaan.

System.Window() functie

De functie System.Window() kan alleen worden gebruikt in de SELECT-component van de GROUP BY-instructie om metagegevens over het tijdvenster voor groepering op te halen.

De functie retourneert een waarde van het type Record met één veld-id, die de identiteit bevat van het venster waartoe de gebeurtenis behoort.

Voorbeelden

Maak een venster om auto's te tellen voor elk van de duur 10, 20, 30, 40, 50 en 60 minuten zonder vensteridentiteit.

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

Maak vensters met een hop van 1 minuut en vier verschillende duurs: 1 min, 15 min, 30 min en 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))) 

Maak vensters van verschillende grootten en filter resultaten op basis van de duur van het venster dat is opgegeven in de tabel Verwijzing.

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  

Zie ook