Sdílet prostřednictvím


Windows (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. Můžete si vybrat ze čtyř druhů časových oken: přeskakování, skáká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, je potřeba 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é přistupovat pomocí systémové funkce System.Window(). Id. System.Window() vrátí záznam s polem Id.

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 je jedinečnou hodnotou varchar(max) nerozlišující malá a velká písmena v konstruktoru Windows.

  • Bez identit, v takovém případě System.Window(). Výsledkem id je hodnota null.

Syntax

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

Poznámka

Konstruktory Systému Windows nelze vnořit. Identity musí být buď přiřazeny všem definicím oken, nebo žádné.

Existují zkrácené názvy definic oken, například "Přeskakující", které lze použít v systému 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 Windows.

Použití System.Window() není chybou. ID bez konstruktoru Windows, ale jeho hodnota bude null, protože okno nemá žádnou identitu.

Pokud jsou definice oken zadány 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() – funkce

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

Vytvářejte okna různých velikostí a filtrujte výsledky na základě doby trvání okna zadané v referenční tabulce.

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é