Compartilhar via


ISFIRST (Azure Stream Analytics)

Retornará 1 se o evento for o primeiro evento dentro de um determinado intervalo fixo ou 0 caso contrário. Os intervalos são alinhados da mesma forma que janelas em cascata (consulte Janela em cascata). ISFIRST não é afetado por predicados na cláusula WHERE, condições de junção na cláusula JOIN ou expressões de agrupamento na cláusula GROUP BY da consulta atual. ).

Sintaxe

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

Argumentos

timeunit

É a unidade de tempo para a duração. A tabela a seguir lista todos os valores de unidade de tempo válidos --- completos
nomes e abreviações podem ser usados na consulta.

Timeunit Abreviações
dia dd, d
hour hh
minute mi, n
second ss, s
milissegundo ms
microssegundo mcs

duration

Um inteiro grande que especifica o número de timeunits no intervalo. Por exemplo,
ISFIRST(minuto, 15) examinará intervalos de 15 minutos. Os horários de início dos intervalos são
alinhado da mesma forma que em janelas em cascata (consulte Janela em cascata (Azure Stream Analytics)).

[ OVER ( partition_by_clause [when_clause]) ]

A cláusula OVER especifica o subconjunto dos eventos entre os quais esse evento é classificado:

A cláusula PARTITION BY partition_by_expression divide o conjunto de resultados produzido pelo FROM
cláusula em partições às quais a função é aplicada. Em outras palavras, cada evento é comparado
somente para outros eventos que compartilham seu valor de partition_by_expression. Se não for especificado, cada
o evento é classificado em relação a todos os outros eventos dentro do intervalo de tempo.

A cláusula WHEN when_expression especifica uma condição booliana para que os eventos sejam considerados.
Em outras palavras, cada evento só é classificado em comparação com esses outros eventos que satisfazem
when_expression. Se o evento em si não atender when_expression, a função retornará 0.
A cláusula WHEN é opcional.

Tipos de retorno

bigint ('1' ou '0' representando 'true' ou 'false', respectivamente)

Comentários gerais

ISFIRST é não determinística. Eventos são processados em ordem temporal. Se houver vários eventos com os mesmos carimbo de data / hora, os eventos são processados em ordem de chegada.

A aplicação de ISFIRST 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. Se ISFIRST não puder ser movido antes da operação da janela, considere usar CollectTop, ordenando pela hora do evento original.

Exemplos

Indique se um evento de leitura de sensor é o primeiro dentro de intervalos de 10 minutos em cascata:

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

Indique se um evento é o primeiro dentro de intervalos de 10 minutos por deviceid:

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

Indique se um evento é o primeiro evento com valor maior que 50 em intervalos de 10 minutos em cascata
por 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'

Consulte Também

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