Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
✅ Поток событий Azure Stream Analytics ✅ Fabric
Оператор аналитики LAG позволяет искать событие "предыдущего" в потоке событий в определенных ограничениях. Это очень полезно для вычисления скорости роста переменной, обнаружения того, когда переменная пересекает пороговое значение, или когда условие начинается или останавливается.
В Stream Analytics область LAG (то есть, насколько далеко назад в журнале от текущего события он должен выглядеть) всегда ограничена конечным интервалом времени, используя предложение LIMIT DURATION. При необходимости LAG может быть ограничен только тем событиям, которые соответствуют текущему событию для определенного свойства или условия с помощью предложений PARTITION BY и WHEN.
LAG не влияет на предикаты в предложении WHERE, условия соединения в предложении JOIN или выражения группировки в предложении GROUP BY текущего запроса, так как он вычисляется перед этими предложениями.
Синтаксис
LAG(<scalar_expression >, [<offset >], [<default>])
OVER ([PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])
Например:
LAG(reading) OVER (LIMIT DURATION(hour, 3))
LAG(name, 2, 'none such') OVER (PARTITION BY userId LIMIT DURATION(minute, 2))
Аргументы
scalar_expression
Возвращаемое значение на основе указанного смещения. Это выражение любого типа, которое возвращает одно (скалярное) значение или выражение подстановочного знака "*". Для "*" будет возвращено все событие в соответствии с указанным смещением и будет содержаться в событии результата (вложенная запись).
scalar_expression не может содержать другие аналитические функции или внешние функции.
смещение
Количество событий обратно из текущего события, из которого требуется получить значение. Если значение не указано, значение по умолчанию равно 1, то есть возвращает предыдущее событие. Смещение должно быть целым числом, превышающим или равным 1. События обрабатываются в темпоральной последовательности. При наличии нескольких событий с одинаковыми событиями метки времени обрабатываются в порядке прибытия.
по умолчанию
Значение, возвращаемое при отсутствии события в указанном смещение. Если значение по умолчанию не указано, возвращается значение NULL. "Событие с указанным смещением" может быть событием 1) если число соответствующих событий, наблюдаемых до сих пор, меньше указанного смещения или 2), если событие по указанному смещение истекает в соответствии с указанными событиями limit_duration_clause 3) существуют, но не соответствуют логическому условию, указанному в when_clause.
Если событие с указанным смещением существует, а значение scalar_expression равно NULL, то ЗНАЧЕНИЕ NULL
возвращается. значение по умолчанию может быть столбцом, вложенным запросом или другим выражением, но оно не может содержать другое.
аналитические функции или внешние функции. по умолчанию должен иметь тот же тип, что и
scalar_expression.
OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause Предложение partition BY <секционирования> запрашивает только события, значение которого
<Ключ секции совпадает с ключом> текущего события. Например:
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
возвращает предыдущее чтение того же датчика, что и текущее событие (если это произошло в течение предыдущего 1 часа).
предложение limit_duration DURATION(<unit>, <length>)
Указывает, сколько журналов должно рассматриваться из текущего события. Дополнительные сведения о поддерживаемых единицах и их сокращениях см. в РАЗДЕЛЕ DATEDIFF. Если в интервале DURATION обнаружены недостаточно событий сопоставления, <возвращается значение по умолчанию> .
when_clause
Указывает логическое условие для событий, которые будут рассматриваться в вычислениях LAG. Если в интервале DURATION обнаружены недостаточно событий сопоставления, <возвращается значение по умолчанию> . When_clause является необязательным.
Типы возвращаемых данных
Тип данных указанного scalar_expression. Значение NULL возвращается, если scalar_expression
Общие замечания
LAG недетерминирован. События обрабатываются в темпоральной последовательности. При наличии нескольких событий с одинаковыми событиями метки времени обрабатываются в порядке прибытия.
Применение LAG к результирующем набору функции окна может привести к непредвиденным результатам. Функции окна изменяют метку времени событий, так как каждая операция окна выводит событие в конце окна. Текущая метка времени события может быть доступна с помощью system.timestamp(), после операции окна она будет отличаться от исходного атрибута времени события. Если не удается переместить LAG перед операцией окна, рассмотрите возможность использования CollectTop, упорядочение по исходному времени события.
Примеры
Вычислить скорость роста на датчик:
SELECT sensorId,
growth = reading -
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
FROM input
Найдите предыдущее чтение датчика без значения NULL:
SELECT
sensorId,
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)
FROM input
Найдите предыдущее чтение датчика, отличного от NULL, для определенного типа датчика:
WITH filterSensor AS
(
SELECT *
FROM input
WHERE input.sensorType = 4 AND sensorId IS NOT NULL
)
SELECT
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
FROM filterSensor
Определите, когда переменная пересекает пороговое значение:
SELECT
sensorId, reading
FROM input
WHERE
devicetype = 'thermostat'
AND reading > 100
AND LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN devicetype = 'thermostat') <= 100