OVER (Azure Stream Analytics)
Para cada fila, la cláusula OVER determina la agrupación de filas antes de aplicar una función de análisis o agregado asociada.
Puede usar la cláusula OVER en cualquier lugar donde se permita una función escalar. Por ejemplo, puede usar la cláusula OVER en las cláusulas SELECT, WHERE, JOIN o GROUP BY.
La cláusula OVER agrupa filas directamente desde la entrada de consulta. No se ve afectado por predicados en la cláusula WHERE, condiciones de combinación en la cláusula JOIN o condiciones de agrupación en la cláusula GROUP BY.
Actualmente, se admiten las siguientes funciones de agregado con la cláusula OVER:
- SUM
- MEDIA
- MIN
- MAX
Sintaxis
OVER ([<PARTITION BY clause>] <LIMIT DURATION clause> [<WHEN clause>])
<PARTITION BY clause> ::== PARTITION BY partition_key, ... [n]
<LIMIT DURATION clause> ::== LIMIT DURATION (unit, length)
<WHEN clause> ::== WHEN boolean_expression
Argumentos
<Cláusula PARTITION BY>
Especifica que solo las filas con la misma <partition_key> se considerarán para la función de agregado o análisis.
<Cláusula LIMIT DURATION>
Especifica cuánto historial de la fila actual se incluye en el grupo. Consulte DATEDIFF para ver una descripción detallada de las unidades que se admiten y sus abreviaturas.
<CLÁUSULA WHEN>
Especifica la condición booleana para las filas que se van a incluir en el grupo.
Notas generales
La aplicación de una función de agregado o analítica con OVER en el conjunto de resultados de una función de ventana puede producir resultados inesperados. Las funciones de ventana modifican la marca de tiempo de los eventos, ya que cada operación de ventana genera un evento al final de la ventana. Se puede tener acceso a la marca de tiempo actual de un evento con system.timestamp(), después de una operación de ventana que difiere del atributo de hora del evento original.
Ejemplos
Calcule la temperatura media en los últimos 5 minutos, por sensor:
SELECT AVG(temperature) OVER (PARTITION BY id LIMIT DURATION (minute, 5))
FROM input
Inicie una alerta si el recurso ha estado en mal estado en la última hora:
SELECT 1 AS alert
FROM input
WHERE MAX(healthy) OVER (PARTITION BY id LIMIT DURATION (hour, 1)) = 0