Compartilhar via


ATRASO

✅ Fluxo de eventos do Azure Stream Analytics ✅ Fabric

O operador analítico LAG permite pesquisar um evento "anterior" em um fluxo de eventos, dentro de determinadas restrições. É muito útil para calcular a taxa de crescimento de uma variável, detectar quando uma variável ultrapassa um limite ou quando uma condição começa ou deixa de ser verdadeira.

No Stream Analytics, o escopo de LAG (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 LAG 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.

LAG não é afetado por predicados na cláusula WHERE, condições de junção na cláusula JOIN ou agrupamento de expressões na cláusula GROUP BY da consulta atual porque ela é avaliada antes dessas cláusulas.

Sintaxe

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

Por exemplo:

LAG(reading) OVER (LIMIT DURATION(hour, 3))  
LAG(name, 2, 'none such') OVER (PARTITION BY userId LIMIT DURATION(minute, 2))  

Argumentos

scalar_expression

O valor a ser retornado com base no deslocamento especificado. É uma expressão de qualquer tipo que retorna um único valor (escalar) ou a expressão curinga '*'. Para '*' todo o evento de acordo com o deslocamento especificado será retornado e será contido no evento de resultado (registro aninhado).
scalar_expression não pode conter outras funções analíticas ou funções externas.

deslocamento

O número de eventos do evento atual do qual obter um valor. Se não for especificado, o padrão será 1, o que significa que ele retorna o evento anterior. O deslocamento deve ser um inteiro maior ou igual a 1. Os eventos são processados em ordem temporal. Se houver vários eventos com os mesmos eventos de carimbo de data/hora, serão processados na ordem de chegada.

padrão

O valor a ser retornado quando não houver nenhum evento no deslocamento especificado. Se um valor padrão não for especificado, NULL será retornado. "Nenhum evento no deslocamento especificado" poderá ser o caso 1) se o número de eventos correspondentes vistos até agora for menor que o deslocamento especificado ou 2) se o evento no deslocamento especificado for cronometrado de acordo com os eventos especificados limit_duration_clause 3), mas não corresponder à condição booliana especificada no when_clause.

Se o evento no deslocamento especificado existir e o valor de scalar_expression for NULL, NULL
é retornado. o padrão pode ser uma coluna, subconsulta ou outra expressão, mas não pode conter outra
funções analíticas ou funções externas. padrão deve 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 é a mesma que a do evento atual a ser considerada. Por exemplo,

LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))  

retornará a leitura anterior do mesmo sensor que o evento atual (se tal ocorreu dentro da 1 hora anterior).

cláusula limit_duration DURATION(<unit>, <length>)

Especifica quanto do histórico do evento atual deve ser considerado. Consulte DATEDIFF para obter uma descrição detalhada das 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 que os eventos sejam considerados na computação LAG. Se não forem encontrados eventos correspondentes suficientes dentro do intervalo DURATION, o <valor padrão> será retornado. O when_clause é opcional.

Tipos de retorno

O tipo de dados do scalar_expression especificado. NULL será retornado se scalar_expression

Comentários gerais

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

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

Exemplos

Compute a taxa de crescimento, por sensor:

SELECT sensorId,  
       growth = reading -
                        LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))  
FROM input  
  

Localize a leitura anterior do sensor não nulo:

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

Localize a leitura anterior do sensor não nulo para um tipo de sensor específico:

WITH filterSensor AS
(
  SELECT *
  FROM input
  WHERE input.sensorType = 4 AND sensorId IS NOT NULL
)

SELECT
  LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
FROM filterSensor

Determine quando uma variável cruza um limite:

SELECT
    sensorId, reading
FROM input
WHERE
    devicetype = 'thermostat'
    AND reading > 100
    AND LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN devicetype = 'thermostat') <= 100

Consulte Também

ISFIRST
ÚLTIMA