Поделиться через


последний

✅ Поток событий Azure Stream Analytics ✅ Fabric

Оператор LAST analytic позволяет искать последнее событие в потоке событий в определенных ограничениях. Это полезно в сценариях, таких как вычисления последнего известного хорошего значения (например, не null), поиск последнего времени, когда событие соответствовало определенным критериям и т. д.

В Stream Analytics область last (т. е. насколько далеко назад в истории от текущего события она должна выглядеть) всегда ограничена конечным интервалом времени, используя предложение LIMIT DURATION. При необходимости можно ограничиться только событиями, которые соответствуют текущему событию для определенного свойства или условия с помощью предложений PARTITION BY и WHEN. LAST не влияет на предикаты в предложении WHERE, условия соединения в предложении JOIN или выражения группировки в предложении GROUP BY текущего запроса.

Замечание: LAST(expression, default>) эквивалентен LAG(<<expression>>, <0, <default>) (то есть значение смещения, равное "0"). Обратите внимание, что LAG(<выражение>, 0, по умолчанию) фактически не является допустимой конструкцией>, <так как LAG принимает смещение больше или равно 1. Поэтому вместо этого необходимо использовать оператор LAST, который был введен для удобства и лучшей удобочитаемости.

Синтаксис

LAST(<scalar_expression >, [<default>])    
       OVER ( [PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])  
  

Аргументы

scalar_expression

Возвращаемое значение. Это выражение любого типа, которое возвращает одно (скалярное) значение или выражение подстановочного знака "*". Для "*" будет возвращено все событие и будет содержаться в событии результата (вложенная запись). scalar_expression не может содержать другие аналитические функции или внешние функции.

по умолчанию

Значение, возвращаемое при отсутствии критериев сопоставления событий. Если значение по умолчанию не указано, возвращается значение NULL. "Нет события" может быть в случае, если в течение limit_duration_clause или события отсутствуют предыдущие события, указанные в limit_duration_clause, или событие существует, но не соответствует условию, указанному в when_clause. Если событие существует и значение scalar_expression равно NULL, возвращается значение NULL. значение по умолчанию может быть столбцом, вложенным запросом или другим выражением, но оно не может содержать другие аналитические функции или внешние функции. значение по умолчанию должно иметь тот же тип, что и scalar_expression.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause Предложение partition BY <секционирования> запрашивает только события, значение которого
<Ключ секции совпадает с ключом> текущего события.

limit_duration_clause DURATION(<unit>, <length>):
Указывает, сколько журналов должно рассматриваться из текущего события. Дополнительные сведения о поддерживаемых единицах и их сокращениях см. в РАЗДЕЛЕ DATEDIFF. Если в интервале DURATION обнаружены недостаточно событий сопоставления, <возвращается значение по умолчанию> .

when_clause Указывает логическое условие для событий, которые будут рассматриваться в вычислениях LAST. Если события сопоставления не найдены в пределах интервала DURATION, <возвращается значение по умолчанию> . When_clause является необязательным.

Типы возвращаемых данных

Тип данных указанного scalar_expression. Значение NULL возвращается, если scalar_expression

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

LAST является недетерминированным. События обрабатываются в темпоральной последовательности. При наличии нескольких событий с одинаковыми событиями метки времени обрабатываются в порядке прибытия.

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

Примеры

Найдите последнее чтение датчика, отличного от NULL:

SELECT  
       sensorId,   
       LAST(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
FROM input   

Найдите время последнего чтения, когда чтение было больше 50:

SELECT
       sensorId,
       LAST(System.Timestamp()) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading > 50 )
FROM input 

См. также

ISFIRST
ОТСТАВАНИЕ