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