Ventana instantánea (Azure Stream Analytics)
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.
En el diagrama siguiente se muestra una secuencia con una serie de eventos y cómo se asignan a las ventanas de instantánea.
System.Timestamp() se puede considerar en la cláusula GROUP BY como una columna de clave o una definición de ventana de instantánea porque agrupa eventos en una ventana en función de la igualdad de marcas de tiempo. Cuando se combina con otra función de ventana, System.Timestamp() se trata como una clave y no como una definición de ventana. System.Timestamp() no produce un error cuando se usa con otras funciones de ventana, a diferencia de cuando se usan varias funciones de ventana en la cláusula GROUP BY. El uso de System.Timestamp() y una función de ventana en GROUP BY puede ser útil para procesar por lotes los resultados.
Cualquier expresión que contenga System.Timestamp() no se considera una ventana. Por ejemplo, GROUP BY DATEPART(minute, System.Timestamp())
se produce un error con el error "se debe especificar una ventana".
Sintaxis
System.Timestamp()
Ejemplos
Ejemplo básico
En el ejemplo siguiente se devuelve el recuento de tweets con el mismo tipo de tema que se produce exactamente al mismo tiempo:
SELECT Topic, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
Ejemplo de instantánea de ventana de saltos de tamaño constante
Un uso común de las ventanas de instantáneas es agregar eventos después de que se hayan agrupado en una sola marca de tiempo a través de una función de ventana anterior, como TumblingWindow a continuación.
En el ejemplo siguiente se devuelve el recuento de tweets con el mismo tipo de tema por el mismo usuario en intervalos de 30 minutos:
WITH PerInterval AS (
SELECT Topic, User, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval
Para buscar el número de usuarios y el número total de tweets por tema dentro del mismo intervalo, puede usar el resultado de la consulta anterior. Debido a los resultados de la ventana de saltos de tamaño constante todos tendrán marcas de tiempo alineadas con el límite de 30 minutos, puede usar una ventana de instantáneas para devolver eventos en cada límite, ya que todos tienen el mismo valor de marca de tiempo.
SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()
La consulta anterior devolvió el número de usuarios y el número total de tweets por tema en el mismo intervalo de 30 minutos. Para obtener los mismos resultados una vez por 2 horas, agregue una ventana de saltos de tamaño constante de 2 horas a la cláusula GROUP BY.
La consulta siguiente devuelve los resultados de los cuatro intervalos de 30 minutos al final de cada ventana de 2 horas.
SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)
Ejemplo de ventanas de agregado
Puede usar System.Timestamp() como una de las ventanas de la construcción agregada windows().
SELECT
TollId,
COUNT(*)
FROM Input TIMESTAMP BY EntryTime
GROUP BY
TollId,
Windows(
TumblingWindow(minute, 10),
TumblingWindow(minute, 20),
System.Timestamp())