Compartilhar via


LAST (Azure Stream Analytics)

O operador analítico LAST permite pesquisar o evento mais recente em um fluxo de eventos dentro de restrições definidas. Ele é útil nos cenários, como calcular o último valor bom conhecido (por exemplo, não nulo), localizar a última vez em que o evento correspondeu a determinados critérios, etc.

No Stream Analytics, o escopo de LAST (ou seja, o quão distante no histórico do evento atual ele precisa parecer) é sempre limitado a um intervalo de tempo finito, usando a cláusula LIMIT DURATION. O LAST pode, opcionalmente, ser limitado a considerar apenas os eventos que correspondem ao evento atual em uma determinada propriedade ou condição usando as cláusulas PARTITION BY e WHEN. LAST 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.

Observação: LAST(<expression>, <default>) é equivalente a LAG(<expression>, 0, <default>) (que é o valor de deslocamento definido como '0'). Observe que LAG(<expressão>, 0, <padrão>) na verdade não é um constructo válido, pois LAG leva um deslocamento maior ou igual a 1. Portanto, você deve usar 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 retornado. É uma expressão de qualquer tipo que retorna um valor único (escalar) ou uma expressão curinga "*". Para '*' todo o evento será retornado e estará contido no evento de resultado (registro aninhado). scalar_expression não pode conter outras funções analíticas ou externas.

default

O valor a ser retornado quando não houver critérios de correspondência de eventos. Se um valor padrão não for especificado, NULL será retornado. 'Nenhum evento' poderá ser o caso se não houver eventos anteriores dentro do intervalo de tempo especificado no limit_duration_clause ou o evento existir, mas não corresponder à condição especificada no when_clause. Se o evento existir e o valor de scalar_expression for NULL, NULL será retornado. default pode ser uma coluna, uma subconsulta ou outra expressão, mas não pode conter outras funções analíticas ou funções externas. default deve ter exatamente o mesmo tipo que scalar_expression.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause A cláusula partition BY <partition key> solicita que apenas eventos cujo valor de
<A chave> de partição é a mesma que a do evento atual a ser considerado.

limit_duration_clause DURATION(<unit>, <length>):
Especifica quanto do histórico do evento atual deve ser considerado. Consulte DATEDIFF para obter uma descrição detalhada de unidades com suporte e suas abreviações. Se não forem encontrados eventos correspondentes suficientes dentro do intervalo DURATION, o <valor padrão> será retornado.

when_clause Especifica a condição booliana para os eventos a serem considerados na computação LAST. Se nenhum evento correspondente for encontrado dentro do intervalo DURATION, o <valor padrão> será retornado. O when_clause é opcional.

Tipos de retorno

O tipo de dados da scalar_expression especificada. NULL será retornado se scalar_expression

Comentários gerais

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

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

Exemplos

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

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

Encontre a última vez em que a leitura foi maior que 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)