OVER (Azure Stream Analytics)
Para cada linha, a cláusula OVER determina o agrupamento de linhas antes que uma função de agregação ou análise associada seja aplicada.
Você pode usar a cláusula OVER em qualquer lugar em que uma função escalar seja permitida. Por exemplo, você pode usar a cláusula OVER nas cláusulas SELECT, WHERE, JOIN ou GROUP BY.
A cláusula OVER agrupa linhas diretamente da entrada de consulta. Ele não é afetado por predicados na cláusula WHERE, condições de junção na cláusula JOIN ou condições de agrupamento na cláusula GROUP BY.
Atualmente, as seguintes funções de agregação têm suporte com a cláusula OVER:
- SUM
- AVG
- MIN
- MAX
Sintaxe
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 somente as linhas com o mesmo <partition_key> serão consideradas para a função de agregação ou analítica.
<Cláusula LIMIT DURATION>
Especifica quanto histórico da linha atual está incluído no grupo. Consulte DATEDIFF para uma descrição detalhada das unidades com suporte e suas abreviaturas.
<CLÁUSULA WHEN>
Especifica a condição booliana para as linhas a serem incluídas no grupo.
Comentários gerais
A aplicação de uma função agregada ou analítica com OVER no conjunto de resultados de uma função de janela pode produzir resultados inesperados. As funções de janela alteram o carimbo de data/hora dos eventos, pois todas as operações de janela geram evento no final da janela. O carimbo de data/hora atual de um evento pode ser acessado com system.timestamp(), após uma operação de janela, ele será diferente do atributo de hora do evento original.
Exemplos
Compute a temperatura média nos últimos 5 minutos, por sensor:
SELECT AVG(temperature) OVER (PARTITION BY id LIMIT DURATION (minute, 5))
FROM input
Gere um alerta se o recurso não estiver íntegro na última hora:
SELECT 1 AS alert
FROM input
WHERE MAX(healthy) OVER (PARTITION BY id LIMIT DURATION (hour, 1)) = 0