ISFIRST (Azure Stream Analytics)
Devolve 1 se o evento for o primeiro evento num determinado intervalo fixo ou 0 de outra forma. Os intervalos são alinhados da mesma forma que as janelas em cascata (veja Janela em Cascata). ISFIRST não é afetado por predicados na cláusula WHERE, condições de associaçã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 durante a duração. A tabela seguinte lista todos os valores de unidade de tempo válidos --- ambos cheios
os nomes e abreviaturas podem ser utilizados na consulta.
Timeunit | Abreviaturas |
---|---|
day | dd, d |
hour | hh |
minute | mi, n |
second | ss, ss |
milissegundos | ms |
microssegundos | mcs |
duração
Um número inteiro grande que especifica o número de timeunits no intervalo. Por exemplo,
ISFIRST(minuto, 15) irá analisar intervalos de 15 minutos. As horas de início dos intervalos são
alinhado da mesma forma que nas janelas em cascata (veja Janela em Cascata (Azure Stream Analytics)).
[ OVER ( partition_by_clause [when_clause]) ]
A cláusula OVER especifica o subconjunto dos eventos entre os quais este evento está 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. Por outras palavras, cada evento é comparado
apenas para outros eventos que partilhem o seu valor de partition_by_expression. Se não for especificado, cada um
o evento é classificado em relação a todos os outros eventos dentro do intervalo de tempo.
QUANDO when_expression cláusula especifica uma condição booleana para que os eventos sejam considerados.
Por outras palavras, cada evento só é classificado em comparação com outros eventos que satisfaçam
when_expression. Se o evento em si não satisfizer when_expression, a função devolve 0.
A cláusula WHEN é opcional.
Tipos de Devolução
bigint ("1" ou "0" que representa "verdadeiro" ou "falso", respectivamente)
Observações Gerais
ISFIRST não éndeterminista. Os eventos são processados por ordem temporal. Se existirem vários eventos com o mesmo carimbo de data/hora, os eventos são processados por 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, uma vez que todas as operações de janela produzem eventos no final da janela. O carimbo de data/hora atual de um evento pode ser acedido com system.timestamp(), após uma operação de janela, será diferente do atributo de hora do evento original. Se o ISFIRST não puder ser movido antes da operação da janela, considere utilizar CollectTop, ordenando pela hora original do evento.
Exemplos
Indique se um evento de leitura do 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
Indicar se um evento é o primeiro evento com um valor superior a 50 dentro de intervalos em cascata de 10 minutos
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'