OVER (Azure Stream Analytics)

Для каждой строки предложение OVER определяет группирование строк перед применением связанной агрегатной или аналитической функции.

Предложение OVER можно использовать везде, где разрешена скалярная функция. Например, можно использовать предложение OVER в предложениях SELECT, WHERE, JOIN или GROUP BY.

Предложение OVER группирует строки непосредственно из входных данных запроса. На него не влияют предикаты в предложении WHERE, условия соединения в предложении JOIN или условия группирования в предложении GROUP BY.

В настоящее время предложение OVER поддерживает следующие агрегатные функции:

  • SUM
  • AVG;
  • MIN
  • MAX

Синтаксис

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

Аргументы

<Предложение PARTITION BY>

Указывает, что для агрегатной или аналитической функции будут учитываться только строки с одинаковым <partition_key> .

<Предложение LIMIT DURATION>

Указывает, какой объем журнала из текущей строки включается в группу. Подробные сведения о поддерживаемых единицах и их сокращениях см. в описании функции DATEDIFF.

<ПРЕДЛОЖЕНИЕ WHEN>

Задает логическое условие для строк, которые будут включены в группу.

Общие замечания

Применение агрегатной или аналитической функции с помощью OVER к результирующем набору оконной функции может привести к непредвиденным результатам. Оконные функции изменяют метку времени событий, так как каждая операция окна выводит событие в конце окна. Доступ к текущей метке времени события можно получить с помощью system.timestamp() и после операции окна она будет отличаться от исходного атрибута времени события.

Примеры

Вычислить среднюю температуру за последние 5 минут для каждого датчика:

SELECT AVG(temperature) OVER (PARTITION BY id LIMIT DURATION (minute, 5))
FROM input

Создайте оповещение, если ресурс был неработоспособен в течение последнего часа:

SELECT 1 AS alert
FROM input
WHERE MAX(healthy) OVER (PARTITION BY id LIMIT DURATION (hour, 1)) = 0

См. также:

Аналитические функции
Агрегатные функции