Introducción a las funciones de ventana de Stream Analytics
En los escenarios de streaming en tiempo real, realizar operaciones en los datos contenidos en ventanas temporales es un patrón común. Stream Analytics ofrece compatibilidad nativa para las funciones de ventana, lo que permite a los desarrolladores crear trabajos de procesamiento de flujo complejos con un mínimo esfuerzo.
Hay cinco tipos de ventanas temporales para elegir:
- Saltos de tamaño constante
- Salto
- Deslizante
- Sesión
- Ventanasde instantánea.
Utilice las funciones de ventana en la cláusula GROUP BY de la sintaxis de consulta en los trabajos de Stream Analytics. También puede agregar eventos a través de varias ventanas mediante la función Windows().
Todas las operaciones de ventana generan resultados al final de la ventana. Al iniciar un trabajo de Stream Analytics, puede especificar la Hora de inicio de salida del trabajo para que el sistema capture automáticamente los eventos anteriores de los flujos entrantes para generar la primera ventana a la hora especificada; por ejemplo, al empezar con la opción Ahora, comienza a emitir datos inmediatamente. La salida de la ventana será un solo evento basado en la función agregada que se usa. El evento de salida tiene la marca de tiempo del final de la ventana y todas las funciones de ventana están definidas con una longitud fija.
Ventana de saltos de tamaño constante
Use las funciones de ventana de saltos de tamaño constante para segmentar una transmisión de datos en segmentos de tiempo distintos y realizar una función con ellos.
Los diferenciadores clave de una ventana de saltos de tamaño constante son:
- No se repiten.
- No se superponen.
- Un evento no puede pertenecer a más de una ventana de saltos de tamaño constante.
Estos son los datos de entrada del ejemplo:
Marca | CreatedAt | TimeZone |
---|---|---|
1 | 2021-10-26T10:15:01 | PST |
5 | 2021-10-26T10:15:03 | PST |
4 | 2021-10-26T10:15:06 | PST |
… | … | … |
Esta es la consulta de ejemplo:
SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)
Esta es la salida de ejemplo:
WindowEndTime | TimeZone | Count |
---|---|---|
2021-10-26T10:15:10 | PST | 5 |
2021-10-26T10:15:20 | PST | 2 |
2021-10-26T10:15:30 | PST | 4 |
Ventana de salto
Las funciones de ventana de salto saltan hacia adelante en el tiempo un período fijo. Puede imaginarlas fácilmente como ventanas de saltos de tamaño constante que pueden superponerse y emitirse con más frecuencia que el tamaño de ventana. Los eventos pueden pertenecer a más de un conjunto de resultados de ventana de salto. Para hacer que una ventana de salto sea igual que una ventana de saltos de tamaño constante, especifique el tamaño de salto de forma que coincida con el tamaño de la ventana.
Estos son los datos de ejemplo:
Marca | CreatedAt | Tema |
---|---|---|
1 | 2021-10-26T10:15:01 | Streaming |
5 | 2021-10-26T10:15:03 | Streaming |
4 | 2021-10-26T10:15:06 | Streaming |
… | … | … |
Esta es la consulta de ejemplo:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)
Esta es la salida de ejemplo:
WindowEndTime | Tema | Count |
---|---|---|
2021-10-26T10:15:10 | Streaming | 5 |
2021-10-26T10:15:15 | Streaming | 3 |
2021-10-26T10:15:20 | Streaming | 2 |
2021-10-26T10:15:25 | Streaming | 4 |
2021-10-26T10:15:30 | Streaming | 4 |
Ventana deslizante
Las ventanas deslizantes, a diferencia de las ventanas de salto o de salto de tamaño constante, solo generan eventos para puntos en el tiempo cuando el contenido de la ventana cambia realmente. En otras palabras, cuando un evento entra o sale de la ventana. Por tanto, cada ventana tiene al menos un evento. De forma similar a lo que sucede en las ventanas de salto, los eventos pueden pertenecer a más de una ventana deslizante.
Estos son los datos de entrada de ejemplo:
Marca | CreatedAt | Tema |
---|---|---|
1 | 2021-10-26T10:15:10 | Streaming |
5 | 2021-10-26T10:15:12 | Streaming |
9 | 2021-10-26T10:15:15 | Streaming |
7 | 2021-10-26T10:15:15 | Streaming |
8 | 2021-10-26T10:15:27 | Streaming |
Esta es la consulta de ejemplo:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3
Salida:
WindowEndTime | Tema | Count |
---|---|---|
2021-10-26T10:15:15 | Streaming | 4 |
2021-10-26T10:15:20 | Streaming | 3 |
Ventana de sesión
Las funciones de ventana de sesión agrupan eventos que llegan a la misma hora, filtrando los periodos en los que no hay ningún dato. Tiene tres parámetros principales:
- Tiempo de espera
- Duración máxima
- Clave de partición (opcional).
Una ventana de sesión se inicia cuando se produce el primer evento. Si se produce otro evento en el tiempo de espera especificado desde el último evento ingerido, la ventana se amplía para incluir el nuevo evento. En caso contrario, si no se produce ningún evento en el tiempo de espera, se cierra la ventana 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. Los intervalos de comprobación de la duración máxima se establecen para que tengan el mismo tamaño que la duración máxima especificada. Por ejemplo, si la duración máxima es 10, las comprobaciones, si la ventana supera la duración máxima, se producen en t = 0, 10, 20, 30, etc.
Cuando se proporciona una clave de partición, los eventos se agrupan por clave, y la ventana de sesión se aplica independientemente a cada grupo. Esta creación de particiones es útil para los casos donde son necesarias distintas ventanas de sesión para distintos usuarios o dispositivos.
Estos son los datos de entrada de ejemplo:
Marca | CreatedAt | Tema |
---|---|---|
1 | 2021-10-26T10:15:01 | Streaming |
2 | 2021-10-26T10:15:04 | Streaming |
3 | 2021-10-26T10:15:13 | Streaming |
… | … | … |
Esta es la consulta de ejemplo:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)
Salida:
WindowEndTime | Tema | Count |
---|---|---|
2021-10-26T10:15:09 | Streaming | 2 |
2021-10-26T10:15:24 | Streaming | 4 |
2021-10-26T10:15:31 | Streaming | 2 |
2021-10-26T10:15:39 | Streaming | 1 |
Ventana de instantánea
Las ventanas de instantánea agrupan los eventos que tienen la misma marca de tiempo. A diferencia de otros tipos de ventanas, que requieren una función de ventana específica (como SessionWindow()), puede aplicar una ventana de instantánea si agrega System.Timestamp() a la cláusula GROUP BY.
Estos son los datos de entrada de ejemplo:
Marca | CreatedAt | Tema |
---|---|---|
1 | 2021-10-26T10:15:04 | Streaming |
2 | 2021-10-26T10:15:04 | Streaming |
3 | 2021-10-26T10:15:04 | Streaming |
… | … | … |
Esta es la consulta de ejemplo:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
Esta es la salida de ejemplo:
WindowEndTime | Tema | Count |
---|---|---|
2021-10-26T10:15:04 | Streaming | 4 |
2021-10-26T10:15:10 | Streaming | 2 |
2021-10-26T10:15:13 | Streaming | 1 |
2021-10-26T10:15:22 | Streaming | 2 |
Pasos siguientes
Vea los artículos siguientes: