ISFIRST (Azure Stream Analytics)

Возвращает значение 1, если событие является первым событием в пределах заданного фиксированного интервала, или 0 в противном случае. Интервалы выравниваются так же, как и переворачивающиеся окна (см. раздел Переворачивающееся окно). НА ISFIRST не влияют предикаты в предложении WHERE, условия соединения в предложении JOIN или выражения группировки в предложении GROUP BY текущего запроса. ).

Синтаксис

ISFIRST ( timeunit  , duration )   
    [ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]  
  

Аргументы

timeunit

Единица времени для этого срока. В следующей таблице перечислены все допустимые значения единиц времени --- как полные.
В запросе можно использовать имена и сокращения.

Timeunit Сокращения
day dd, d
hour hh
minute mi, n
second ss, s
миллисекунда ms
микросекунда mcs

duration

Большое целое число, указывающее количество единиц времени в интервале. Например,
ISFIRST(minute, 15) будет смотреть на 15-минутные интервалы. Время начала интервалов:
выровнены так же, как и в переворачивающихся окнах (см. раздел Переворачивающееся окно (Azure Stream Analytics)).

[ OVER ( partition_by_clause [when_clause]) ]

Предложение OVER указывает подмножество событий, среди которых это событие ранжируется:

Предложение PARTITION BY partition_by_expression делит результирующий набор, созданный from
в секции, к которым применяется функция. Другими словами, каждое событие сравнивается
только для таких других событий, которые имеют значение partition_by_expression. Если значение не указано, каждая из них
Событие ранжируется по отношению ко всем остальным событиям в пределах интервала времени.

Предложение WHEN when_expression указывает логическое условие для событий, которые необходимо учитывать.
Другими словами, каждое событие ранжируется только по сравнению с другими событиями, которые удовлетворяют
when_expression. Если само событие не удовлетворяет when_expression, функция возвращает значение 0.
Предложение WHEN является необязательным.

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

bigint ("1" или "0", представляющий "true" или "false" соответственно)

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

ISFIRST является недетерминированным. События обрабатываются во временной последовательности. Если существует несколько событий с одинаковыми отметками времени, то они обрабатываются в порядке их получения.

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

Примеры

Укажите, является ли событие чтения датчика первым в течение 10-минутных интервалов:

SELECT  
       reading,  
       ISFIRST(mi, 10) as first  
FROM Input  

Укажите, является ли событие первым в течение 10 минут переворачивающегося интервала на deviceid:

SELECT  
       deviceid,  
       reading,  
       ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first  
FROM Input  

Укажите, является ли событие первым событием со значением, превышающим 50 в течение 10-минутных интервалов.
на deviceid:

SELECT
       deviceid,
       reading,
       ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading > 50 AND devicetype = 'thermostat') as firstAbove,
       ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading < 50 AND devicetype = 'thermostat') as firstUnder
FROM Input
WHERE
       devicetype = 'thermostat'

См. также:

LAG (Azure Stream Analytics)
LAST (Azure Stream Analytics)