Informazioni sulle funzioni finestra
Un obiettivo comune dell'elaborazione del flusso consiste nell'aggregare gli eventi in intervalli temporali o finestre. Ad esempio, per contare il numero di post dei social media al minuto o per calcolare le precipitazioni medie all'ora.
Analisi di flusso di Azure include il supporto nativo per cinque tipi di funzioni finestra temporali. Queste funzioni consentono di definire intervalli temporali in cui i dati vengono aggregati in una query. Le funzioni finestra supportate sono a cascata, di salto, temporali scorrevoli, di sessionee snapshot.
A cascata
Le funzioni finestra a cascata segmentano un flusso di dati in una serie contigua di segmenti temporali a dimensione fissa e non sovrapposti ed eseguono operazioni su tali segmenti. Gli eventi non possono appartenere a più di una finestra a cascata.
L'esempio di finestra a cascata, rappresentato dalla query seguente, trova il valore di lettura massimo in ogni finestra di un minuto. Le funzioni finestra vengono applicate in processi di Analisi di flusso usando la clausola GROUP BY della sintassi di query. La clausola GROUP BY
nella query seguente contiene la funzione TumblingWindow()
, che specifica una dimensione della finestra di 10 minuti.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)
Di salto
Le funzioni finestra di salto modellano finestre sovrapposte pianificate, che si spostano in avanti nel tempo in base a un periodo fisso. È forse più semplice considerarle finestre a cascata che possono sovrapporsi ed essere emesse con maggiore frequenza rispetto alla dimensione delle finestre. Infatti, le finestre a cascata sono semplicemente finestre di salto in cui hop
è uguale a size
. Quando si usano finestre di salto, gli eventi possono appartenere a più di un set di risultati di una finestra.
Per creare una finestra di salto, è necessario specificare tre parametri. Il primo parametro indica l'unità di tempo, ad esempio secondi, minuti o ore. Il parametro seguente imposta la dimensione della finestra, che specifica la durata di ogni finestra. Il parametro finale obbligatorio è la dimensione del salto, che specifica di quanto si sposta in avanti ogni finestra rispetto alla precedente. È possibile usare anche un quarto parametro facoltativo che indica la dimensione dell'offset.
La query seguente mostra l'uso di un oggetto HoppingWindow()
in cui timeunit
è impostato su second
. windowsize
è 60 secondi e hopsize
è 30 secondi. Questa query restituisce un evento ogni 30 secondi che contiene il numero di eventi che si sono verificati negli ultimi 60 secondi.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)
Estendibile
Le finestre temporali scorrevoli generano eventi per momenti nel tempo in cui il contenuto della finestra è effettivamente cambiato. Questo modello di funzione limita il numero di finestre che devono essere considerate. Per limitare il numero di finestre da considerare, Analisi di flusso di Azure restituisce eventi solo per i momenti in cui un evento entra nella finestra o esce dalla finestra. Di conseguenza, ogni finestra contiene almeno un evento. Come per le finestre di salto, gli eventi nelle finestre temporali scorrevoli possono appartenere a più di una finestra temporale scorrevole.
La query seguente usa la funzione per trovare il SlidingWindow()
valore di lettura massimo in ogni finestra di un minuto in cui si è verificato un evento.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)
Sessione
Le funzioni finestra di sessione raggruppano eventi che arrivano in momenti simili, escludendo i periodi di tempo in cui non sono presenti dati. Includono tre parametri principali: timeout, durata massima e chiave di partizionamento (facoltativo).
L'occorrenza del primo evento avvia una finestra di sessione. Si supponga che si verifichi un altro evento entro il timeout specificato dall'ultimo evento inserito. In questo caso, la finestra verrà estesa per includere il nuovo evento. Tuttavia, se non si verificano altri eventi entro il periodo di timeout specificato, la finestra verrà chiusa al timeout. Se continuano a verificarsi eventi entro il timeout specificato, la finestra di sessione continuerà a estendersi fino al raggiungimento della durata massima.
La query seguente misura la durata della sessione utente creando un oggetto SessionWindow
su dati clickstream con timeoutsize
di 20 secondi e maximumdurationsize
di 60 secondi.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)
Snapshot
Le finestre snapshot raggruppano gli eventi in base a valori di timestamp identici. Diversamente da altri tipi di finestra, non è necessaria una funzione finestra specifica. È possibile usare una finestra snapshot aggiungendo System.Timestamp()
alla clausola GROUP BY
della query.
La query seguente, ad esempio, individua il valore massimo di lettura per gli eventi che si verificano contemporaneamente.
SELECT System.TimeStamp() AS WindowTime,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()
System.Timestamp()
viene considerato nella clausola GROUP BY
una definizione di finestra snapshot perché raggruppa gli eventi in una finestra in base all'uguaglianza dei timestamp.