Share via


Finestre snapshot

Una finestra snapshot definisce un subset di eventi che rientrano in un certo periodo di tempo e su cui è possibile eseguire alcuni calcoli basati su set, ad esempio un'aggregazione. Le finestre snapshot dividono la sequenza temporale in ore di inizio e di fine degli eventi e sono pertanto dinamiche e basate sugli eventi. Insieme alle modifiche del timestamp, sono molto flessibili e possono essere utilizzate per diversi di scenari.

Per una descrizione generale delle finestre di eventi e della relativa implementazione nonché dell'utilizzo in StreamInsight, vedere Utilizzo delle finestre di eventi.

Informazioni sulle finestre snapshot

Le finestre snapshot sono definite in base all'ora di inizio e di fine degli eventi nel flusso, anziché in base a una griglia fissa lungo la sequenza temporale. La dimensione e il periodo di tempo della finestra sono definiti solo dagli eventi nel flusso. Per ogni coppia di endpoint dell'evento (ora di inizio e ora di fine) più vicini, viene creata una finestra snapshot. In base a questa definizione, tutte le ore di inizio e di fine dell'evento rientrano nei limiti della finestra e non si trovano mai tra di essi. Le finestre snapshot dividono pertanto la sequenza temporale in base a tutte le modifiche eseguite.

Nella figura seguente è illustrato un flusso con tre eventi: e1, e2 ed e3. Le barre verticali mostrano i limiti della finestra snapshot che sono definiti da questi eventi. I flussi di eventi in celeste rappresentano i flussi di eventi che si spostano nel tempo. Le caselle arancioni mostrano le finestre snapshot e gli eventi contenuti in ogni finestra. Ad esempio, in base all'ora di inizio e all'ora di fine, solo l'evento e1 è nella prima finestra snapshot. Entrambi gli eventi e1 ed e2 si sovrappongono e, pertanto, sono inclusi nella seconda finestra.

SnapshotWindowForEvents

Dopo che il framework applica i criteri di input che ritagliano gli eventi nelle finestre, attualmente gli unici disponibili, gli eventi vengono visualizzati come mostrato nell'illustrazione seguente.

SnapshotWindowForEvents2

Si tratta delle finestre e degli eventi che rappresentano l'input nell'operazione effettiva basata su set. Comprendere il comportamento in base al quale vengono eseguite le operazioni di ritaglio è importante quando si applica una funzione di aggregazione definita dall'utente che varia in base al tempo o un operatore in grado di controllare i timestamp degli eventi di input.

Definizione di una finestra snapshot

Le finestre snapshot non dispongono di parametri per la definizione di finestra. I criteri della finestra predefiniti consentono di ritagliare gli eventi di input e di output in base alle dimensioni della finestra.

var snapshotAgg = from w in inputStream.SnapshotWindow()
                  select new { sum = w.Sum(e => e.i) };

Gli argomenti della finestra snapshot nell'esempio precedente sono proprietà statiche mediante le quali vengono restituite le istanze delle classi di criteri corrispondenti. Queste proprietà vengono fornite per comodità.

Le finestre snapshot sono costrutti potenti che possono essere utilizzati per implementare le finestre temporali scorrevoli. Una finestra temporale scorrevole è una finestra nel tempo che si sposta con gli eventi anziché in base a un periodo fisso. Il vantaggio di una finestra temporale scorrevole consiste nel fatto che regola la lunghezza in base agli eventi di input e pertanto non produce un output se l'input non è stato modificato. Ciò può essere considerato come un modo per comprimere il flusso di eventi. Tale progettazione è utile soprattutto per un'aggregazione all'interno di un operatore di raggruppamento e applicazione, con dati di input che costituiscono un numero elevato di gruppi. Con una finestra di salto, ogni gruppo produrrebbe un risultato per ogni finestra, indipendentemente della frequenza di modifica dell'input. Per ulteriori informazioni, vedere Finestre di salto.

Una finestra temporale scorrevole viene implementata con l'operatore della finestra snapshot abbinato alla modifica temporale appropriata del flusso di input. La modifica del timestamp (generalmente un'estensione della durata dell'evento) modificherà innanzitutto la "copertura" di ogni evento nel tempo. La finestra snapshot conterrà quindi tutti gli eventi che rientrano in quella durata. Si supponga, ad esempio, che l'obiettivo sia calcolare la media scorrevole di un flusso di input degli eventi punto negli ultimi tre minuti. Nell'illustrazione seguente viene mostrato come un'applicazione del metodo AlterEventDuration() nel flusso di input adatti ogni evento lungo la sequenza temporale.

SnapshotWindowForEvents3

In tale flusso, viene applicato l'operatore della finestra snapshot e la media nel campo evento desiderato viene calcolata in base alle finestre risultanti come mostrato nell'illustrazione seguente.

SnapshotWindowForEvent4

Gli eventi risultanti in questa illustrazione descrivono la media di tutti gli eventi entro gli ultimi tre minuti, in corrispondenza di ogni punto nel tempo. Questo risultato è rappresentato da eventi intervallo che durano finché la media non viene modificata entro tale intervallo di tempo. Ad esempio, il quarto evento nella serie indica che la media di tutti gli eventi durante gli ultimi tre minuti è 1,5, misurata da un qualsiasi punto all'interno di tale evento. L'evento del risultato inizia quando l'evento punto con payload 3 non rientra nel periodo dei tre minuti e l'evento del risultato termina subito prima che l'evento punto con payload 1 rientri nel periodo come mostrato nell'illustrazione seguente.

SnapshotWindowForEvents5

Utilizzando LINQ (Language Integrated Query), questo scenario viene espresso come segue (presupponendo che il tipo di evento di input disponga di un campo 'Valore').

var result = from win in inputStream.AlterEventDuration(e => TimeSpan.FromMinutes(3)).SnapshotWindow()
             select new { average = win.Avg(e => e.Value) };

In generale, per "risalire" a una determinata quantità di tempo quando si applica un'operazione basata su set tramite una finestra snapshot, le durate dell'evento devono essere estese nel futuro. Per ottenere risultati diversi, è possibile utilizzare altri tipi di operatori di modifica della durata dell'evento. Per ulteriori informazioni, vedere Modifiche dei timestamp.

Vedere anche

Concetti

Aggregazioni

TopK

Funzioni di aggregazione e operatori definiti dall'utente

Modifiche dei timestamp

Finestre di conteggio

Finestre di salto

Utilizzo delle finestre di eventi