Informazioni sulle funzioni finestra

Completato

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.

A diagram illustrating a stream with a series of events mapped into 1-minute tumbling windows.

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.

The diagram illustrates a stream with a series of events captured in 60 second hopping windows that occur every 30 seconds.

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.

The diagram illustrates a stream with a series of events mapped into sliding windows of 1 minute.

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

The diagram illustrates a stream with a series of events mapped into session windows with a 20-second timeout and a maximum duration of 60 seconds.

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.

The diagram illustrates a stream with a series of events mapped into snapshot windows.

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.