LAST (Azure Stream Analytics)

O operador analítico LAST permite-lhe procurar o evento mais recente num fluxo de eventos dentro de restrições definidas. É útil nos cenários, como calcular o último valor válido conhecido (por exemplo, não nulo), encontrar a última vez em que o evento correspondeu a determinados critérios, etc.

No Stream Analytics, o âmbito de LAST (ou seja, a distância do histórico do evento atual que precisa de procurar) está sempre limitado a um intervalo de tempo finito, utilizando a cláusula LIMIT DURATION. Opcionalmente, LAST pode ser limitado a considerar apenas eventos que correspondam ao evento atual numa determinada propriedade ou condição com as cláusulas PARTITION BY e WHEN. LAST 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.

Observação: LAST(<expressão, <predefinição>>) é equivalente a LAG(<expressão>, 0, <predefinição>) (que é o valor de deslocamento definido como '0'). Tenha em atenção que LAG(<expressão>, 0, predefinição>) não é, na verdade, <uma construção válida, uma vez que LAG assume um deslocamento maior ou igual a 1. Em vez disso, tem de utilizar o operador LAST, que foi introduzido para conveniência e melhor legibilidade.

Sintaxe

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

Argumentos

scalar_expression

O valor a ser devolvido. É uma expressão de qualquer tipo que devolve um único valor (escalar) ou a expressão de caráter universal '*'. Para '*' todo o evento será devolvido e será contido no evento de resultado (registo aninhado). scalar_expression não pode conter outras funções analíticas ou funções externas.

predefinição

O valor a devolver quando não existem critérios de correspondência de eventos. Se não for especificado um valor predefinido, é devolvido NULL. "Nenhum evento" pode ser o caso se não existirem eventos anteriores dentro do intervalo de tempo especificado no limit_duration_clause ou se o evento existir, mas não corresponder à condição especificada no when_clause. Se o evento existir e o valor de scalar_expression for NULO, será devolvido NULO. A predefinição pode ser uma coluna, subconsulta ou outra expressão, mas não pode conter outras funções analíticas ou funções externas. A predefinição tem de ter exatamente o mesmo tipo que scalar_expression.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause PARTITION BY <partition key> clause requests that only events whose value of
<A chave> de partição é igual à do evento atual.

limit_duration_clause DURAÇÃO(<unidade>; <comprimento>):
Especifica a quantidade de histórico do evento atual que tem de ser considerada. Veja DATEDIFF para obter uma descrição detalhada das unidades suportadas e das respetivas abreviaturas. Se não forem encontrados eventos correspondentes suficientes dentro do intervalo DURAÇÃO, é devolvido o <valor predefinido> .

when_clause Especifica a condição booleana para que os eventos sejam considerados na computação LAST. Se não forem encontrados eventos correspondentes dentro do intervalo DURAÇÃO, é devolvido o <valor predefinido> . O when_clause é opcional.

Tipos de Retorno

O tipo de dados do scalar_expression especificado. NULL é devolvido se scalar_expression

Observações Gerais

LAST não é determinístico. 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 pela ordem de chegada.

Aplicar LAST 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 cada operação de janela produz o evento 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 LAST não puder ser movido antes da operação de janela, considere utilizar CollectTop, ordenando pela hora original do evento.

Exemplos

Localize a leitura do sensor não nulo mais recente:

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

Localize a última vez em que a leitura foi superior a 50:

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

Consulte também

ISFIRST (Azure Stream Analytics)
LAG (Azure Stream Analytics)