Ventanas de recuento

Una ventana de recuento define un subconjunto de eventos que están en algún período de tiempo y sobre el que puede realizar un cálculo basado en conjuntos como una agregación. Las ventanas de recuento, como las de instantánea, no tienen un tamaño de ventana fijo. El número de eventos que contienen las define. De esta forma se habilitan muchos escenarios en los que se debe aplicar una operación basada en conjunto en un número específico de eventos de una secuencia con una frecuencia de eventos irregular.

SugerenciaSugerencia

En esta versión de StreamInsight, las ventanas de recuento solo se pueden utilizar con agregados u operadores definidos por el usuario, pero no con agregados integrados y TopK.

Para obtener una descripción general de las ventanas de evento, su implementación y uso en StreamInsight, vea Utilizar ventanas de eventos.

Descripción de las ventanas de recuento

El tamaño variable de estas ventanas se define mediante el recuento de las distintas horas de inicio de eventos en una escala de tiempo. El conjunto de ventanas de recuento con un recuento N se define como todos los intervalos de tiempo que contienen N horas de inicio de evento consecutivas, donde N es al menos 1. Más concretamente, cada intervalo de tiempo finaliza en la hora de inicio más un tic del evento enésimo distinto. Las ventanas de recuento siguen la escala de tiempo con cada hora de inicio de evento distinta. Por tanto, cada nuevo evento que define una nueva hora de inicio de evento provoca la creación de una nueva ventana de recuento, siempre que se cumpla el recuento. Es decir, si el número de las distintas horas de inicio de eventos es menor que N, no se crea ninguna nueva ventana. Al igual que en las ventanas de salto, el desplazamiento entre las ventanas de recuento se denomina tamaño de salto. Sin embargo, a diferencia de las ventanas de salto, el tamaño de salto de las ventanas de recuento suele ser constante.

Si cada evento de la escala de tiempo tiene una marca de tiempo única, el número de eventos en cada ventana de este tipo es igual a N. Si varios eventos tienen la misma hora de inicio de evento, el número de eventos contenidos será mayor que N. Es importante entender este comportamiento al aplicar agregaciones a la ventana.

La siguiente ilustración muestra una secuencia con tres eventos: e1, e2 y e3. Las barras verticales muestran los límites de ventana de recuento definidos por estos eventos. Los flujos de eventos en azul claro son los flujos de eventos que se mueven en el tiempo. Los cuadros naranja muestran las ventanas de recuento y los eventos de cada ventana. Las dos primeras horas de inicio de eventos distintas pertenecen a e1 y e2, y la primera ventana de recuento abarca el período correspondiente, empezando por la hora de inicio de e1 y finalizando con la hora de inicio de e2 más un clic. La segunda ventana contiene las horas de inicio de e2 y e3:

Ventana de recuento para eventos.

Tenga en cuenta que esta ilustración muestra los eventos de las ventanas ya recortados por la directiva de entrada de ventana. La directiva de entrada, como ocurre con todas las ventanas del StreamInsight, es recortar los eventos al tamaño de la ventana. Un agregado u operador que dependa del tiempo usará estas duraciones de evento recortadas en las ventanas, en vez de los originales.

La siguiente ilustración muestra ventanas de recuento con eventos de punto, que solo son válidos para un momento único en el tiempo. También muestra que el método CountByStartTimeWindow() cuenta las horas de inicio de evento distintas y no los propios eventos. En esta ilustración se muestra un flujo de eventos de punto. Las barras verticales muestran las horas de inicio de la ventana de recuento definidas por estos eventos de punto. Las secuencias de eventos en azul claro son las secuencias de eventos que se mueven en el tiempo. Observe que se colocan dos eventos en el mismo momento. Los cuadros naranjas muestran las ventanas de recuento y los eventos de cada ventana. Los dos eventos colocados se consideran como unidad con respecto al parámetro de ventana N.

Ventana de recuento.

En el caso de los eventos de punto, el comportamiento de la ventana según el cual se agrega un tic a la hora de inicio del evento enésimo al definir la hora de finalización de la ventana, hace que esta incorpore todos sus eventos por completo.

Definir una ventana de recuento

Las ventanas de recuento se definen mediante el recuento de las distintas horas de inicio de eventos en la escala de tiempo. Una ventana de recuento se especifica en Language Integrated Query (LINQ), como se muestra en el siguiente ejemplo. La directiva de entrada siempre es ClipToWindow y la directiva de salida siempre es PointAlignToWindowEnd.

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

Dado que las ventanas de recuento actualmente no se pueden usar con agregados integrados, en el ejemplo anterior se supone el agregado definido por el usuario MySum.

Lo mismo que en cualquier otra ventana, la directiva de salida de esta ventana se aplica al resultado de la operación basada en conjunto. La única directiva de salida disponibles para las ventanas de recuento es producir un evento de punto al final de la ventana. La marca de tiempo de este momento coincide con la última hora de inicio de evento de la ventana Es decir, el evento de punto sigue estando dentro de la ventana. Si se aplica una agregación de entrada del diagrama anterior, la apariencia del flujo de salida es la siguiente:

Ventana de recuentos con los resultados de la agregación.

Para un operador definido por el usuario (UDO) que depende del tiempo en el que el UDO puede producir eventos de resultados incluidas las marcas de tiempo, la directiva de salida sobrescribe las marcas de tiempo. Cada evento devuelto por el UDO se transforman en un evento de punto al final de la ventana, de forma que el punto está alineado con la hora de inicio del último evento de la ventana, igual que el evento de resultado único de una agregación mostrado en el diagrama anterior.

Vea también

Conceptos

Agregaciones

TopK

Agregados y operadores definidos por el usuario

Ventanas de salto

Ventanas de instantánea