Windows (Analisi di flusso di Azure)

Windowing consente di aggregare gli eventi in vari intervalli di tempo a seconda di definizioni di finestra specifiche. Esistono quattro tipi di finestre temporali tra cui scegliere: a cascata, salto, scorrimento e sessione.

La funzione Windows() estende questo concetto per calcolare simultaneamente i risultati di più definizioni di finestra diverse. La funzione Windows() consente di specificare più di una definizione di finestra. La logica di query viene calcolata per ognuna di queste definizioni di finestra e il risultato è un'unione di tutti i risultati della finestra.

Poiché il risultato della funzione Windows() contiene una combinazione di più finestre, è necessario distinguere tra i diversi risultati. Questa operazione viene eseguita assegnando un'identità a ogni finestra a cui è possibile accedere usando la funzione di sistema System.Window(). Id. System.Window() restituisce un record con l'ID come campo.

Esistono due modi per definire Windows:

  • Assegnare identità univoche usando la funzione Window(), Window( ID , window_definition ), dove ID è un'identità di window_definition ed è un valore varchar(max) univoco senza distinzione tra maiuscole e minuscole all'interno del costrutto di Windows.

  • Senza identità, nel qual caso System.Window(). L'ID restituisce un valore Null.

Sintassi

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

Nota

I costrutti di Windows non possono essere annidati. Le identità devono essere date a tutte le definizioni di finestra o date a nessuno.

Esistono nomi di definizione di finestra abbreviati, ad esempio "a cascata", che possono essere usati in Windows() per evitare la ripetizione della parola "window" come in Windows(Window('MyWindow', TumblingWindow(…. I nomi abbreviati possono essere usati anche all'esterno del costrutto di Windows.

Non è un errore usare System.Window(). ID senza il costrutto di Windows, ma il relativo valore sarà Null perché non è stata assegnata alcuna identità alla finestra.

Se le definizioni di finestra vengono specificate usando la funzione Window(), tutte le definizioni di finestra devono usare la funzione Window() e tutti gli ID senza distinzione tra maiuscole e minuscole devono essere univoci. Null non è consentito.

Funzione System.Window()

La funzione System.Window() può essere utilizzata solo nella clausola SELECT dell'istruzione GROUP BY per recuperare i metadati relativi all'intervallo di tempo di raggruppamento.

La funzione restituisce un valore di tipo Record contenente un singolo ID campo, che contiene l'identità della finestra a cui appartiene l'evento.

Esempio

Creare una finestra per contare le automobili per ognuna delle durate 10, 20, 30, 40, 50 e 60 minuti senza identità finestra.

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

Creare finestre con un hop di 1 minuto e quattro durate diverse : 1 min, 15 min, 30 min e 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))) 

Creare finestre di dimensioni diverse e filtrare i risultati in base alla durata della finestra specificata nella tabella Riferimento.

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  

Vedi anche