Sdílet prostřednictvím


Windows

✅Eventstream prostředků infrastruktury Azure Stream Analytics ✅

Vytváření oken poskytuje způsob, jak agregovat události v různých časových intervalech v závislosti na konkrétních definicích oken. Existují čtyři druhy časových oken, ze které si můžete vybrat: přeskakování, přeskakování, posuvné a relace.

Funkce Windows() rozšiřuje tento koncept tak, aby současně počítaly výsledky několika různých definic oken. Funkce Windows() umožňuje zadat více než jednu definici okna. Logika dotazu se vypočítá pro každou z těchto definic oken a výsledkem je sjednocení všech výsledků okna.

Vzhledem k tomu, že výsledek funkce Windows() obsahuje kombinaci více oken, musíte rozlišovat mezi různými výsledky. To se provádí přiřazením identity ke každému oknem, ke kterému je možné získat přístup pomocí systémové funkce System.Window(). Id. System.Window() vrátí záznam s ID jako jeho pole.

Windows můžete definovat dvěma způsoby:

  • Přiřaďte jedinečné identity pomocí funkce Window(),Window ( ID , window_definition ), kde ID je identita window_definition a jedná se o jedinečnou hodnotu varchar(max) nerozlišující malá a velká písmena v rámci konstruktoru Windows.

  • Bez identit, v takovém případě System.Window(). Id má za následek hodnotu null.

Syntaxe

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

Poznámka:

Konstrukty systému Windows nelze vnořit. Identity musí být předány všem definicím oken nebo žádné.

Existují zkrácené názvy definic oken, například "Přeskakující", které lze použít ve Windows(), aby se zabránilo opakování slova "okno" jako v Windows(Window('MyWindow', TumblingWindow(…. Zkrácené názvy lze použít také mimo konstruktor systému Windows.

Použití system.Window() není chybou. ID bez konstruktoru Windows, ale jeho hodnota bude null, protože do okna nebyla předána žádná identita.

Pokud se definice oken zadají pomocí funkce Window(), musí všechny definice oken používat funkci Window() a všechna ID nerozlišující malá a velká písmena musí být jedinečná. Hodnota Null není povolena.

System.Window()

Funkci System.Window() lze použít pouze v klauzuli SELECT příkazu GROUP BY k načtení metadat o časovém intervalu seskupení.

Funkce vrátí hodnotu typu Record obsahující id jednoho pole, které obsahuje identitu okna, do kterého událost patří.

Příklady

Vytvořte okno pro počítání aut pro každou dobu trvání 10, 20, 30, 40, 50 a 60 minut bez identity okna.

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

Vytvořte okna s 1minutovým segmentem směrování a čtyřmi různými dobami trvání – 1 min, 15 min, 30 min a 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))) 

Vytvořte okna s různými velikostmi a výsledky filtrování na základě doby trvání okna zadaného v tabulce Reference.

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  

Viz také