Condividi tramite


Finestre di conteggio

In una finestra di conteggio viene definito 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 di conteggio, ad esempio le finestre snapshot, non prevedono dimensioni fisse. Vengono definite in base al numero di eventi che contengono. Ciò consente vari scenari in cui un'operazione basata su set deve essere applicata a un numero di eventi specifico in un flusso con una frequenza eventi irregolare.

SuggerimentoSuggerimento

In questa versione di StreamInsight le finestre di conteggio possono essere utilizzate solo con funzioni di aggregazione oppure operatori definiti dall'utente, ma non con aggregazioni incorporate e TopK.

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 di conteggio

La dimensione variabile delle finestre di conteggio è definita dal conteggio delle diverse ore di inizio degli eventi lungo una sequenza temporale. Il set di finestre di conteggio con un conteggio di N è definito come tutti gli intervalli di tempo che contengono N ore di inizio di eventi consecutivi, dove N è almeno uguale a 1. Più precisamente, ognuno di tali intervalli di tempo termina all'ora di inizio più un tick dell'ennesimo evento distinto. Le finestre di conteggio si spostano lungo la sequenza temporale con l'ora di inizio di ogni evento distinto. Ogni nuovo evento che definisce una nuova ora di inizio dell'evento provoca pertanto la creazione di una nuova finestra di conteggio, fino al completamento del conteggio. Questo significa che fino a quando il numero di ore di inizio degli eventi distinti è inferiore a N, non viene creata una nuova finestra. Come nel caso delle finestre di salto, l'offset tra finestre di conteggio è detto dimensione hop, tuttavia, in generale, la dimensione hop per le finestre di conteggio non è costante.

Se ogni evento della cronologia dispone di un timestamp univoco, il numero di eventi in ognuna di tali finestre è uguale a N. Se l'ora di inizio di più eventi è uguale, il numero di eventi contenuti sarà maggiore di N. È importante comprendere questo comportamento quando si applicano aggregazioni alla finestra.

Nella figura seguente è illustrato un flusso con tre eventi: e1, e2 ed e3. Le barre verticali mostrano i limiti della finestra di conteggio 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 di conteggio e gli eventi contenuti in ogni finestra. Le ore di inizio dei primi due eventi distinti appartengono a e1 ed e2 e la prima finestra di conteggio si estende nel periodo corrispondente, iniziando con l'ora di inizio di e1 e finendo con l'ora di inizio di e2 più un tick. La seconda finestra contiene le ore di inizio di e2 ed e3:

Finestra di conteggio per gli eventi.

In questa illustrazione vengono mostrati gli eventi nelle finestre già ritagliate dai criteri di input della finestra. I criteri di input, come per tutte le finestre StreamInsight, consistono nel ritagliare gli eventi in base alle dimensioni della finestra. Una funzione di aggregazione o un operatore che varia in base al tempo utilizzerà nelle finestre queste durate degli eventi ritagliate, anziché quelle originali.

Nella figura seguente sono illustrate le finestre di conteggio con eventi punto, validi solo per un singolo istante nel tempo. In questo modo viene ulteriormente dimostrato che il metodo CountByStartTimeWindow() conteggia le ore di inizio di eventi distinti anziché gli eventi stessi. Nella figura è illustrato un flusso di eventi punto. Le barre verticali mostrano le ore di inizio della finestra di conteggio definite da questi eventi. I flussi di eventi in celeste rappresentano i flussi di eventi che si spostano nel tempo. Si noti che due eventi sono collocati alla stessa ora. Le caselle arancioni mostrano le finestre di conteggio e gli eventi contenuti in ogni finestra. I due eventi collocati alla stessa ora equivalgono a un'unità per quanto riguarda il parametro della finestra N.

Finestra di conteggio.

Nel caso di eventi punto, il comportamento della finestra derivante dall'aggiunta di un tick all'ora di inizio dell'ennesimo evento quando si definisce l'ora di fine della finestra comporta l'incorporamento nella finestra di tutti gli eventi.

Definizione di una finestra di conteggio

Una finestra di conteggio è definita dal conteggio delle diverse ore di inizio degli eventi lungo la cronologia. Una finestra di conteggio viene specificata in LINQ come illustrato nell'esempio seguente. Il criterio di input è sempre ClipToWindow, mentre quello di output è sempre PointAlignToWindowEnd.

var agg = from w in inputStream.CountByStartTimeWindow(10)
          select new { sum = w.MySum(e => e.i) };

Poiché attualmente le finestre di conteggio non possono essere utilizzate con le aggregazioni predefinite, nell'esempio riportato in precedenza si presuppone una funzione di aggregazione definita dall'utente MySum.

Come per qualsiasi altra finestra, i criteri di output di questa finestra vengono applicati al risultato dell'operazione basata su set. Gli unici criteri di output disponibili per le finestre di conteggio consistono nel produrre un evento punto alla fine della finestra. Il timestamp dell'intervallo di tempo coincide con l'ora di inizio dell'ultimo evento della finestra. In altre parole, l'evento punto si trova ancora all'interno dell'intervallo di tempo della finestra. Applicando un'aggregazione dell'input del diagramma sopra riportato, il flusso di output appare come segue:

Finestra di conteggio con risultati delle aggregazioni.

Per un operatore definito dall'utente (UDO) che varia in base al tempo, in grado di produrre eventi del risultato contenenti timestamp, questi ultimi vengono sovrascritti dai criteri di output. Ogni evento restituito dall'UDO viene trasformato in un evento punto alla fine della finestra in modo che il punto sia allineato con l'ora di inizio dell'ultimo evento della finestra, proprio come il singolo evento del risultato di un'aggregazione, mostrato nel diagramma precedente.

Vedere anche

Concetti

Aggregazioni

TopK

Funzioni di aggregazione e operatori definiti dall'utente

Finestre di salto

Finestre snapshot