Comprender las funciones de ventana

Completado

Un objetivo común del procesamiento de flujos es agregar eventos a intervalos temporales o ventanas. Por ejemplo, para contar el número de publicaciones por minuto en redes sociales o calcular el volumen de precipitaciones por hora.

Azure Stream Analytics incluye compatibilidad nativa con cinco tipos de funciones de ventanas temporales. Estas funciones permiten definir intervalos temporales en los que se agregan datos en una consulta. Las funciones de ventana admitidas son Saltos de tamaño constante, Salto, Deslizante, Sesión e Instantánea.

Saltos de tamaño constante

Las funciones de ventana de saltos de tamaño constante segmentan un flujo de datos en una serie contigua de segmentos temporales de tamaño fijo y no superpuestos y funcionan en ellos. Los eventos no pueden pertenecer a más de una ventana de saltos de tamaño constante.

A diagram illustrating a stream with a series of events mapped into 1-minute tumbling windows.

El ejemplo de ventana de saltos de tamaño constante, representado por la consulta siguiente, busca el valor máximo de lectura en cada ventana de un minuto. Las funciones de ventana se aplican en los trabajos de Stream Analytics mediante la cláusula AGRUPAR POR de la sintaxis de consulta. La cláusula GROUP BY de la consulta siguiente contiene la función TumblingWindow(), que especifica un tamaño de ventana de 1 minuto.

SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)

Salto

Las funciones de ventana de salto modelan ventanas superpuestas programadas, avanzando en el tiempo según un período fijo. Es más fácil verlas como ventanas de saltos de tamaño constante que pueden superponerse y emitirse con más frecuencia que el tamaño de la ventana. De hecho, las ventanas de saltos de tamaño constante son simplemente una ventana de salto cuyo valor hop es igual a size. Cuando se usan ventanas de salto, los eventos pueden pertenecer a más de un conjunto de resultados de ventana.

The diagram illustrates a stream with a series of events captured in 60 second hopping windows that occur every 30 seconds.

Para crear una ventana de salto, debe especificar tres parámetros. El primer parámetro indica la unidad de tiempo, como segundo, minuto u hora. El parámetro siguiente establece el tamaño de la ventana, que designa cuánto dura cada ventana. El último parámetro necesario es el tamaño del salto, que especifica cuánto avanza cada ventana con respecto a la anterior. También se puede usar un cuarto parámetro opcional que denota el tamaño del desplazamiento.

En la consulta siguiente se muestra el uso de HoppingWindow(), donde timeunit está establecido como second. windowsize es 60 segundos y hopsize es 30 segundos. Esta consulta genera un evento cada 30 segundos que contiene el valor máximo de lectura ocurrida en los últimos 60 segundos.

SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)

Deslizante

Las ventanas deslizantes generan eventos para puntos en el tiempo cuando el contenido de la ventana cambia realmente. Este modelo de función limita el número de ventanas que se deben tener en cuenta. Azure Stream Analytics genera eventos solo para esos puntos en el tiempo cuando un evento entra o sale de la ventana. Por lo tanto, cada ventana contiene un mínimo de un evento. Los eventos de las ventanas deslizantes pueden pertenecer a más de una ventana deslizante, de forma similar a las ventanas de salto.

The diagram illustrates a stream with a series of events mapped into sliding windows of 1 minute.

La consulta siguiente usa la función SlidingWindow() para buscar el valor máximo de lectura en cada ventana de un minuto en la que se produjo un evento.

SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)

Sesión

Las funciones de ventana de sesión agrupan eventos que llegan a la misma hora y excluyen del filtro los períodos de tiempo en los que no hay ningún dato. Tiene tres parámetros principales: tiempo de espera, duración máxima y clave de partición (opcional).

The diagram illustrates a stream with a series of events mapped into session windows with a 20-second timeout and a maximum duration of 60 seconds.

La ocurrencia del primer evento inicia una ventana de sesión. Supongamos que se produce otro evento dentro del tiempo de espera especificado desde el último evento ingerido. En ese caso, la ventana se ampliará para incorporar el nuevo evento. Sin embargo, si no se produce ningún otro evento dentro del período de tiempo de espera especificado, la ventana se cerrará en el tiempo de espera. Si se siguen produciendo eventos en el tiempo de espera especificado, la ventana de sesión se sigue ampliando hasta que se alcanza la duración máxima.

La consulta siguiente mide la longitud de la sesión del usuario mediante la creación de SessionWindow sobre la información de la secuencia de clic con timeoutsize de 20 segundos y maximumdurationsize de 60 segundos.

SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)

Instantánea

Las ventanas de instantánea agrupan los eventos por valores de marca de tiempo idénticos. A diferencia de otros tipos de ventanas, no se requiere ninguna función de ventana específica. Puede emplear una ventana de instantánea especificando la función System.Timestamp() a la cláusula GROUP BY de la consulta.

The diagram illustrates a stream with a series of events mapped into snapshot windows.

Por ejemplo, la consulta siguiente busca el valor de lectura máximo de los eventos que se producen exactamente al mismo tiempo.

SELECT System.TimeStamp() AS WindowTime,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()

System.Timestamp() se considera en la cláusula GROUP BY como una definición de ventana de instantánea porque agrupa los eventos en una ventana en función de la igualdad de las marcas de tiempo.