Utilizar ventanas de eventos

En aplicaciones que procesan eventos en tiempo real, un requisito común es realizar cálculos basados en conjuntos (agregación) u otras operaciones con subconjuntos de eventos que se encuentran en un período de tiempo determinado. En StreamInsight, estos subconjuntos de eventos se definen por medio de ventanas. En este tema se describen las ventanas y su definición, se indican los tipos de ventanas admitidos en StreamInsight y se explica el uso de las ventanas con diversos operadores.

En esta sección

Tipos de ventanas

Operaciones que se realizan en la parte superior de las ventanas

Descripción de las ventanas

Una ventana contiene los datos de eventos de una escala de tiempo y le permite realizar diversas operaciones en los eventos de la misma. Por ejemplo, puede desear sumar los valores de los campos de carga útil de una ventana determinada, como se muestra en la siguiente ilustración.

Explica el concepto de ventana de eventos.

En la ilustración anterior se muestra cómo se aplica una ventana de salto a un flujo de eventos y cómo se aplica un agregado al flujo de ventanas. La forma de los eventos que llevan los resultados de agregación depende de la directiva de salida de ventana; aquí se representan los eventos de punto en el final de la ventana.

La operación basada en ventanas convierte el flujo de eventos en un flujo de ventanas (CepWindowStream<T>), que se puede usar como base para una operación basada en conjuntos. Cada ventana a lo largo de la escala de tiempo representa un conjunto de eventos. El tipo de ventana que utilice determina cómo se colocan los eventos: las ventanas pueden ser basadas en tiempo o basadas en recuento. Cada tipo de ventana se representa mediante un operador de creación de ventanas.

La operación basada en conjuntos convierte un flujo de ventanas, de nuevo, en un flujo de eventos (CepStream<T>). Estas operaciones basadas en conjunto se dividen en los dos grupos siguientes:

  • Agregaciones que producen un resultado escalar para un conjunto de eventos de entrada.

  • Operaciones que producen cero o más eventos de salida para un conjunto de eventos de entrada.

Entre los ejemplos del primer grupo se encuentran sum, avg, count y agregados definidos por el usuario. Una o varias de estas agregaciones se pueden aplicar a un flujo en ventana, de forma que un evento del resultado corresponde a una ventana de entrada y los resultados de agregación escalares son campos de la carga del evento resultante. Puede desear sumar los valores de uno o más campos de carga de una ventana y, en función de esos valores, realizar otro procesamiento o crear otro flujo de eventos con los datos agregados.

Entre los ejemplos del segundo grupo se encuentran el operador TopK y operadores definidos por el usuario. Se definen en un flujo en ventana y producen cero o más eventos por ventana como resultado de su cálculo. Podría usar el operador TopK para tomar los cinco eventos superiores de cada ventana de instantánea definida para un flujo de entrada concreto y generar un nuevo flujo de eventos para su procesamiento adicional.

Cuando los eventos de un flujo en ventana pasan a un operador basado en conjunto y cuando vuelven de un operador basado en conjunto al flujo, sus marcas de tiempo se pueden transformar. Estas transformaciones se llaman directiva de entrada y directiva de salida, respectivamente. Estas directivas afectan a la forma en que los eventos aparecen en las ventanas y a la forma en que se transmite el resultado de la operación basada en conjunto.

StreamInsight admite los siguientes tipos de ventanas:

Especificar ventanas

Como se muestra en la siguiente ilustración, una especificación de ventana se compone de tres partes:

  • La definición de la ventana (intervalos de tiempo para ventanas de salto, un recuento para ventanas basadas en recuento, sin parámetro para ventanas de instantánea)

  • Una transformación temporal de la entrada (directiva de entrada)

  • Una transformación temporal de la salida (directiva de salida)

flujos de eventos en agregados definidos por el usuario

La ilustración describe de forma conceptual las transformaciones de un flujo a medida que pasa por una operación basada en conjunto sobre una ventana.

  1. En el punto A, un flujo de eventos se introduce en el operador de ventana.

  2. En el punto B, el operador de ventana genera un flujo de ventanas. Cada ventana contiene un conjunto de eventos. Es posible que las duraciones de estos eventos se hayan modificado según la directiva de entrada. El flujo de eventos se introduce en un operador basado en conjunto, como una agregación, o un operador definido por el usuario.

  3. En el punto C, el operador basado en conjunto procesa cada ventana y genera un flujo de eventos como resultado.

    • En los agregados, se crea un evento por cada conjunto (o cero si la ventana está vacía). Dado que la agregación solo especifica un valor escalar, la duración del evento de salida se establece de forma predeterminada en el intervalo de tiempo de la ventana. Esto se aplica a las agregaciones integradas, así como al resultado de los agregados definidos por el usuario.

    • En los operadores definidos por el usuario y TopK, se producen cero o más eventos. Los UDO que dependen del tiempo también especifican las duraciones del evento de salida. En los operadores TopK y UDO que no dependen del tiempo, la duración del evento de salida se establece de forma predeterminada en el intervalo de tiempo de la ventana.

  4. En el punto D, se puede aplicar una directiva de salida a los eventos de salida. Esto permite que el autor de la consulta modifique las propiedades de tiempo de los eventos e invalide los valores de duración predeterminados generados por el operador basado en conjunto.

Mediante programación, los tres cuadros blancos de la ilustración se manifiestan como parámetros ante los operadores de ventana.

Directivas de ventana

Los operadores de ventana crean flujos de ventanas, que constituyen la entrada necesaria para cualquier operación basada en conjunto. Además de la definición de la propia ventana (por lo que se refiere a tiempo o recuento), el autor de la consulta puede decidir cómo la operación de ventana afecta a las duraciones de los eventos incluidos en ella cuando se pasan a la operación basada en conjuntos, y cómo se deben ajustar las duraciones de los eventos de resultado de la operación.

El autor de la consulta especifica ambas directivas como parte del operador de ventana para controlar o invalidar las marcas de tiempo predeterminadas de la agregación o UDO sobre la ventana.

Directivas de entrada

En esta versión, StreamInsight admite la directiva de entrada única que consiste en ajustar la hora de inicio y la hora de finalización de los eventos de la ventana a la hora de inicio y la hora de finalización de la ventana. Así, toda operación basada en conjuntos (dependiente del tiempo) solo verá las marcas de tiempo de evento dentro de la ventana, aunque los eventos originales podrían haberse superpuesto fuera de la ventana antes de que se aplicara la directiva de entrada.

La especificación de la directiva de entrada es opcional. Para mayor comodidad, la clase WindowInputPolicy proporciona una propiedad estática que devuelve una instancia correspondiente (WindowInputPolicy.ClipToWindow).

Directivas de salida

En esta versión, StreamInsight admite las siguientes directivas de salida:

  • Ventanas de instantánea: las horas de finalización de los eventos resultantes se ajustarán a la hora de finalización de la ventana.

  • Las ventanas de salto admiten las dos directivas siguientes de salida:

    • Los eventos resultantes son los eventos de punto alineados con la hora de finalización de ventana.

    • Las horas de finalización de los eventos resultantes se ajustarán a la hora de finalización de la ventana.

  • Ventanas de recuento: el evento resultante se convierte en un evento de punto al final de la ventana.

Para cada tipo de ventana existen clases de directiva de salida diferentes. Para mayor comodidad, cada clase de directiva de salida proporciona una propiedad estática que devuelve una instancia correspondiente:

  • SnapshotWindowOutputPolicy.Clip (valor predeterminado si no se especifica)

  • HoppingWindowOutputPolicy.ClipToWindowEnd

  • HoppingWindowOutputPolicy.PointAlignToWindowEnd (valor predeterminado si no se especifica)

  • CountWindowOutputPolicy.PointAlignToWindowEnd (valor predeterminado si no se especifica)

Este es un resumen de todas las ventanas disponibles y su efecto en el resultado de la operación basada en conjunto:

Ventana de instantánea:

Directiva de salida: siempre "Ajustar al final de la ventana"

Duraciones de salida:

ClipToWindowEnd

Agregados integrados

tamaño de ventana

TopK

tamaño de ventana

UDA independiente del tiempo

tamaño de ventana

UDO independiente del tiempo

tamaño de ventana

UDA/UDO dependiente del tiempo

no disponible para ventanas de instantánea

Ventana de salto:

Directiva de salida: "Ajustar al final de la ventana" o "PointAlignToWindowEnd"

Duraciones de salida:

ClipToWindowEnd

PointAlignToWindowEnd

Agregados integrados

tamaño de ventana

punto al final de la ventana

TopK

tamaño de ventana

punto al final de la ventana

UDA

tamaño de ventana

punto al final de la ventana

UDO

tamaño de ventana

Puntos al final de la ventana

UDO dependiente del tiempo

duraciones devueltas, ajustadas al final de la ventana

puntos al final de la ventana

Ventana de recuento:

Directiva de salida: siempre "punto al final de la ventana"

Duraciones de salida:

PointAlignToWindowEnd

Agregados integrados

no disponible para ventanas de recuento

TopK

no disponible para ventanas de recuento

UDA

punto al final de la ventana

UDO

puntos al final de la ventana

UDO dependiente del tiempo

puntos al final de la ventana

Vea también

Conceptos

Agregaciones

TopK

Agregados y operadores definidos por el usuario