Utilizzo delle finestre di eventi

Nelle applicazioni in cui vengono elaborati gli eventi in tempo reale, un requisito comune è quello di eseguire alcuni calcoli basati su set (aggregazione) o altre operazioni su subset di eventi che rientrano in un determinato periodo di tempo. In StreamInsight questi subset di eventi sono definiti tramite finestre. In questo argomento verranno descritte le finestre e il modo in cui vengono definite, verranno identificati i tipi di finestre supportati in StreamInsight e verrà illustrato il modo in cui è possibile utilizzare le finestre con i vari operatori.

Contenuto della sezione

Tipi di finestre

Operazioni effettuate nelle finestre

Informazioni sulle finestre

Una finestra contiene i dati dell'evento insieme a una sequenza temporale e consente di effettuare diverse operazioni in relazione agli eventi inclusi nella finestra. Ad esempio, in una specifica finestra è possibile sommare i valori dei campi di payload come mostrato nell'illustrazione seguente.

Illustrazione dei concetti di una finestra di eventi.

Nella figura precedente viene illustrato come una finestra di salto viene applicata a un flusso di eventi e come un'aggregazione viene applicata al flusso della finestra. La forma degli eventi in cui sono presenti i risultati dell'aggregazione dipende dai criteri di output della finestra; in questo caso sono rappresentati dagli eventi punto alla fine della finestra.

L'operazione di windowing consente di trasformare il flusso di eventi in un flusso della finestra (CepWindowStream<T>) che può servire quindi come base per un'operazione basata su set. Ogni finestra lungo la sequenza temporale rappresenta un set di eventi. Il tipo di finestra utilizzato determina il modo in cui vengono collocati gli eventi: le finestre possono essere basate sul tempo o sul conteggio. Ogni tipo di finestra è rappresentato da un operatore di windowing.

L'operazione basata su set trasforma un flusso di finestre di nuovo in un flusso di eventi (CepStream<T>). Tali operazioni basate su set possono essere suddivise nei due gruppi seguenti:

  • Aggregazioni che producono un risultato scalare per un set di eventi di input.

  • Operazioni che producono zero o più eventi di output per un set di eventi di input.

Tra gli esempi del primo gruppo vi sono sum, avg, count e le funzioni di aggregazione definite dall'utente. È possibile applicare una o più di tali aggregazioni a un flusso a finestre, in modo che un evento risultato corrisponda a ogni finestra di input, con i risultati delle aggregazioni scalari come campi nel payload di eventi risultante. È ad esempio possibile sommare i valori di uno o più campi di payload in una finestra e, in base a tali valori, eseguire ulteriori elaborazioni o creare un altro flusso di eventi contenente i dati aggregati.

Esempi del secondo gruppo sono gli operatori definiti dall'utente e TopK. Essi sono definiti in un flusso a finestre e producono zero o più eventi multipli per finestra come un risultato del calcolo. Ad esempio, è possibile utilizzare l'operatore TopK per prendere i primi cinque eventi da ogni finestra snapshot definita per un flusso di input specifico e generare un nuovo flusso di eventi per un'altra elaborazione.

Quando gli eventi di un flusso a finestre vengono passati a un operatore basato su set e quando vengono restituiti da un operatore basato su set nel flusso, è possibile che i timestamp vengano trasformati. Queste trasformazioni vengono chiamate, rispettivamente, criteri di input e criteri di output. Questi criteri influiscono sulla modalità di visualizzazione degli eventi nelle finestre e sulla modalità di invio come flusso del risultato dell'operazione basata su set.

StreamInsight supporta i tipi di finestra seguenti:

Specifica delle finestre

Come illustrato nella figura seguente, la specifica di una finestra è costituita da tre parti:

  • Definizione della finestra (intervalli di tempo per una finestra di salto, un conteggio per le finestre basate sul conteggio, nessun parametro per una finestra snapshot)

  • Trasformazione temporale dell'input (criteri di input)

  • Trasformazione temporale dell'output (criteri di output)

Flussi di eventi in aggregazioni definite dall'utente

Nella figura vengono descritte in modo concettuale le trasformazioni di un flusso nel passaggio lungo un'operazione basata su set in una finestra.

  1. In corrispondenza del punto A, viene inserito un flusso di eventi nell'operatore della finestra.

  2. In corrispondenza del punto B, l'operatore della finestra produce un flusso di finestre. Ogni finestra contiene un set di eventi. La durata di questi eventi potrebbe essere stata modificata in base ai criteri di input. Il flusso di eventi viene immesso in un operatore basato su set come un'aggregazione o un operatore definito dall'utente.

  3. In corrispondenza del punto C, l'operatore basato su set elabora ogni finestra e produce un flusso di eventi come output.

    • Per le aggregazioni, viene creato un evento per ogni set (o zero se la finestra è vuota). Poiché l'aggregazione specifica solo un valore scalare, la durata dell'evento di output viene impostata, per impostazione predefinita, sull'intervallo di tempo della finestra. Questo comportamento si applica sia alle aggregazioni incorporate che al risultato di funzioni di aggregazione definite dall'utente.

    • Per gli operatori definiti dall'utente e TopK, vengono prodotti zero o più eventi. Anche gli operatori definiti dall'utente che variano in base al tempo definiscono la durata degli eventi di output. Per gli operatori definiti dall'utente e TopK che non variano in base al tempo, la durata dell'evento di output viene impostata, per impostazione predefinita, sull'intervallo di tempo della finestra.

  4. In corrispondenza del punto D, agli eventi di output possono venire applicati criteri di output. In questo modo, l'autore della query può modificare le proprietà temporali degli eventi ed eseguire l'override dei valori di durata predefiniti prodotti dall'operatore basato su set.

A livello di programmazione, le tre caselle bianche nella figura vengono manifestate come parametri agli operatori della finestra.

Criteri delle finestre

Gli operatori delle finestre creano flussi di finestre, che costituiscono l'input necessario per qualsiasi operazione basata su set. Oltre alla definizione della finestra stessa (in termini di tempo o conteggio), l'autore della query può influenzare 1) il modo in cui l'operazione di windowing influisce sulle durate degli eventi contenuti nella finestra quando vengono passati all'operazione basata su set e 2) il modo in cui le durate degli eventi del risultato dell'operazione devono essere modificate.

Entrambi i criteri vengono specificati dall'autore della query come parte dell'operatore della finestra per controllare o eseguire l'override dei timestamp predefiniti dell'aggregazione o UDO nella parte superiore della finestra.

Criteri di input

In questa versione, StreamInsight supporta i singoli criteri di input che prevedono il ritaglio sia dell'ora di inizio sia dell'ora di fine degli eventi nella finestra in base all'ora di inizio e all'ora di fine della finestra. Ciò significa che qualsiasi operazione basata su set (variabile in base al tempo) visualizzerà solo i timestamp dell'evento all'interno della finestra, anche se è possibile che gli eventi originali si sovrappongono al di fuori della finestra prima dell'applicazione dei criteri di input.

La specifica dei criteri di input è facoltativa. Per semplicità, la classe WindowInputPolicy fornisce una proprietà statica che restituisce un'istanza corrispondente (WindowInputPolicy.ClipToWindow).

Criteri di output

In questa versione, StreamInsight supporta i criteri di output seguenti:

  • Finestre snapshot: le ore di fine degli eventi risultanti verranno ritagliate in base all'ora di fine della finestra.

  • Le finestre di salto supportano i 2 criteri di output seguenti:

    • Gli eventi risultanti sono eventi punto allineati con l'ora di fine della finestra.

    • Le ore di fine degli eventi risultanti verranno ritagliate in base all'ora di fine della finestra.

  • Finestre di conteggio: l'evento risultante viene trasformato in un evento punto alla fine della finestra.

Per ogni tipo di finestra esistono classi di criteri di output separate. Per semplicità, le classi di criteri di output forniscono ciascuna una proprietà statica che consente di restituire un'istanza corrispondente:

  • SnapshotWindowOutputPolicy.Clip (impostazione predefinita se non è specificata)

  • HoppingWindowOutputPolicy.ClipToWindowEnd

  • HoppingWindowOutputPolicy.PointAlignToWindowEnd (impostazione predefinita se non è specificata)

  • CountWindowOutputPolicy.PointAlignToWindowEnd (impostazione predefinita se non è specificata)

Di seguito è riportato un riepilogo di tutte le finestre disponibili e del relativo effetto sul risultato dell'operazione basata su set:

Finestra snapshot:

Criteri di output: sempre 'Ritaglio alla fine della finestra'

Durate di output:

ClipToWindowEnd

Aggregazioni predefinite

dimensioni della finestra

TopK

dimensioni della finestra

UDA (aggregazione definita dall'utente) che non varia in base al tempo

dimensioni della finestra

UDO che non varia in base al tempo

dimensioni della finestra

UDA/UDO che varia in base al tempo

n/d per le finestre snapshot

Finestra di salto:

Criteri di output: 'Ritaglio alla fine della finestra' o 'PointAlignToWindowEnd'

Durate di output:

ClipToWindowEnd

PointAlignToWindowEnd

Aggregazioni predefinite

dimensioni della finestra

punto alla fine della finestra

TopK

dimensioni della finestra

punto alla fine della finestra

UDA

dimensioni della finestra

punto alla fine della finestra

UDO

dimensioni della finestra

Punti alla fine della finestra

UDO che varia in base al tempo

durate restituite, tagliate alla fine della finestra

punti alla fine della finestra

Finestra di conteggio:

Criteri di output: sempre 'Punto alla fine della finestra'

Durate di output:

PointAlignToWindowEnd

Aggregazioni predefinite

n/d per le finestre di conteggio

TopK

n/d per le finestre di conteggio

UDA

punto alla fine della finestra

UDO

punti alla fine della finestra

UDO che varia in base al tempo

punti alla fine della finestra

Vedere anche

Concetti

Aggregazioni

TopK

Funzioni di aggregazione e operatori definiti dall'utente