Condividi tramite


Finestra Snapshot (Analisi di flusso di Azure)

Le finestre snapshot raggruppano eventi con lo stesso timestamp. A differenza di altri tipi di finestra, che richiedono una funzione finestra specifica ,ad esempio SessionWindow(), è possibile applicare una finestra snapshot aggiungendo System.Timestamp() alla clausola GROUP BY.

Il diagramma seguente illustra un flusso con una serie di eventi e il relativo mapping alle finestre snapshot.

Diagramma della finestra snapshot

System.Timestamp() può essere considerato nella clausola GROUP BY come una colonna chiave o una definizione di finestra snapshot perché raggruppa gli eventi in una finestra in base all'uguaglianza dei timestamp. In combinazione con un'altra funzione window, System.Timestamp() viene considerato come una chiave e non come definizione di finestra. System.Timestamp() non genera un errore quando viene usato con altre funzioni finestra a differenza di quando nella clausola GROUP BY vengono usate più funzioni della finestra. L'uso di System.Timestamp() e di una funzione window in GROUP BY può essere utile per l'invio in batch dei risultati.

Qualsiasi espressione che contiene System.Timestamp() non viene considerata una finestra. Ad esempio, GROUP BY DATEPART(minute, System.Timestamp()) ha esito negativo e viene visualizzato l'errore "è necessario specificare una finestra".

Sintassi

System.Timestamp()

Esempio

Esempio di base

L'esempio seguente restituisce il numero di tweet con lo stesso tipo di argomento che si verifica esattamente allo stesso tempo:

SELECT Topic, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

Esempio di snapshot della finestra a cascata

Un utilizzo comune per le finestre snapshot consiste nell'aggregare gli eventi dopo che sono stati raggruppati in un singolo timestamp tramite una funzione finestra precedente, ad esempio TumblingWindow di seguito.

L'esempio seguente restituisce il numero di tweet con lo stesso tipo di argomento per lo stesso utente entro intervalli di 30 minuti:

WITH PerInterval AS (
    SELECT Topic, User, COUNT(*)
    FROM TwitterStream TIMESTAMP BY CreatedAt
    GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval

Per trovare il numero di utenti e tweet totali per argomento nello stesso intervallo, è possibile usare il risultato della query precedente. A causa dei risultati della finestra a cascata tutti i timestamp saranno allineati al limite di 30 minuti, è possibile usare una finestra snapshot per restituire eventi a ogni limite perché hanno tutti lo stesso valore di timestamp.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()

La query precedente ha restituito il numero di utenti e i tweet totali per argomento nello stesso intervallo di 30 minuti. Per ottenere gli stessi risultati una volta per 2 ore, aggiungere una finestra a cascata di 2 ore alla clausola GROUP BY.

La query seguente restituisce i risultati di tutti e quattro gli intervalli di 30 minuti alla fine di ogni finestra di 2 ore.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)

Esempio di finestre di aggregazione

È possibile usare System.Timestamp() come una delle finestre nel costrutto Windows() aggregato.

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows(
        TumblingWindow(minute, 10),
        TumblingWindow(minute, 20),
        System.Timestamp())