Janelas de contagem
Uma janela de contagem define um subconjunto de eventos que se enquadram em determinado período de tempo e no qual você pode realizar certa computação baseada em conjunto, como uma agregação. Assim como as janelas de instantâneo, as janelas de contagem não têm um tamanho fixo. Elas são definidas pelo número de eventos que contêm. Isso permite várias situações nas quais uma operação baseada em conjunto deva ser aplicada em um número específico de eventos, em um fluxo que tenha uma frequência de evento irregular.
Dica |
---|
Nesta versão do StreamInsight, as janelas de contagem só podem ser usadas com agregações definidas pelo usuário ou operadores definidos pelo usuário, mas não com agregações internas e TopK. |
Para obter uma descrição geral de janelas de eventos, bem como de sua implementação e uso no StreamInsight, consulte Usando janelas de eventos.
Noções básicas sobre janelas de contagem
O tamanho variável dejanela das janelas de contagem é definido pela contagem de horas de início de diferentes eventos ao longo de uma linha do tempo. O conjunto de janelas de contagem com uma contagem N é definido como todos os períodos de tempo N contendo horas de início de evento consecutivas, em que N é pelo menos 1. Mais precisamente, cada período de tempo termina na hora de início mais uma escala do enésimo evento distinto. Janelas de contagem se movem na linha do tempo de acordo com cada hora de início de evento distinta. Portanto, cada novo evento que define uma nova hora de início de evento levará à criação de uma nova janela de contagem, desde que a contagem seja atendida. Ou seja, desde que o número de horas de início de evento distintas seja menor que N, uma nova janela não será criada. Assim como em janelas de salto, o deslocamento entre janelas de contagem é chamado de tamanho de salto; contudo, em geral, ao contrário de uma janela de salto, o tamanho de salto para janelas de contagem não será frequente.
Se cada evento na linha do tempo tiver um carimbo de data/hora exclusivo, o número de eventos em cada janela será igual a N. Se vários eventos tiverem a mesma hora de início de evento, o número de eventos contidos será maior que N. É importante entender esse comportamento ao aplicar agregações à janela.
A ilustração a seguir mostra um fluxo com três eventos: e1, e2 e e3. As barras verticais mostram os limites da janela de contagem que são definidos por esses eventos. Os fluxos de eventos em azul-claro representam os fluxos de eventos que se movem com o passar do tempo. As caixas de cor laranja mostram as janelas de contagem e os eventos contidos em cada janela. As primeiras duas horas de início do evento distintas pertencem a e1 e e2, e a primeira janela de contagem atinge o período correspondente, iniciando com a hora de início de e1 e terminando com a hora de início de e2 mais uma marca de escala. A segunda janela contém as horas de início de e2 e e3:
Observe que esta ilustração mostra os eventos nas janelas já recortadas pela política de entrada de janela. A política de entrada, como acontece com todas as janelas do StreamInsight, é recortar os eventos no tamanho da janela. Um operador ou agregação com diferenciação de hora usará esses tempos de vida de evento recortados nas janelas, em vez dos originais.
A ilustração a seguir mostra janelas de contagem com eventos de ponto, que são válidos apenas para um único instante. Isso demonstra ainda mais que o método CountByStartTimeWindow() conta horas de início de evento distintas em vez de contar os próprios eventos. A ilustração mostra o fluxo de eventos de ponto. As barras verticais mostram as horas de início da janela de contagem que são definidas pelos eventos de ponto. Os fluxos de eventos em azul-claro representam os fluxos de eventos que se movem com o passar do tempo. Observe que dois eventos são dispostos ao mesmo tempo. As caixas de cor laranja mostram as janelas de contagem e os eventos contidos em cada janela. Os dois eventos dispostos contam como uma unidade em relação ao parâmetro N da janela.
No caso de eventos de ponto, o comportamento de adição de uma escala à hora de início do enésimo evento ao definir a hora de término da janela leva a janela a incorporar todos os seus eventos.
Definição de uma janela de contagem
Uma janela de contagem é definida pela contagem de horas de início de evento distintas ao longo da linha do tempo. Uma janela de contagem é especificada na LINQ (consulta integrada à linguagem), como mostra o exemplo a seguir. A política de entrada é sempre ClipToWindow, enquanto a política de saída é sempre PointAlignToWindowEnd.
var agg = from w in inputStream.CountByStartTimeWindow(10)
select new { sum = w.MySum(e => e.i) };
Como as janelas de contagem atualmente não podem ser usadas com agregações internas, o exemplo anterior pressupõe a agregação definida pelo usuário MySum.
Como em qualquer outra janela, essa política de saída da janela é aplicada ao resultado da operação baseada em conjunto. A única política de saída disponível para janelas de contagem é produzir um evento de ponto no final da janela. O carimbo de data/hora da hora do ponto coincide com a hora de início do último evento na janela. Em outras palavras, o evento de ponto ainda permanece ao alcance da janela. Aplicando uma agregação da entrada do diagrama anterior, o fluxo de saída será semelhante ao seguinte:
Para um UDO (operador definido pelo usuário) com detecção de hora, no qual o UDO pode gerar eventos de resultado, inclusive carimbos de data/hora, esses carimbos são substituídos pela política de saída. Cada evento retornado pelo UDO é transformado em um evento de ponto no final da janela, de forma que o ponto seja alinhado à hora de início do último evento na janela, assim como o evento de resultado único de uma agregação, mostrado no diagrama anterior.