TIMESTAMP BY (Azure Stream Analytics)

Todos os eventos de fluxo de dados têm um carimbo de data/hora associado a eles. Por padrão, os eventos do Hub de Eventos e Hub IoT são carimbos de data/hora com base em quando o evento foi recebido pelo Hub de Eventos ou Hub IoT; os eventos do armazenamento de Blobs são carimbo de data/hora da última modificação do blob. O carimbo de data/hora de um evento não será alterado se você reiniciar ou executar novamente seu trabalho.

Muitos aplicativos de streaming exigem o uso do carimbo de data/hora exato em que ocorreu um evento, em vez da hora de chegada. Por exemplo, em um aplicativo ponto de vendas, pode-se precisar de carimbos de data/hora de evento correspondentes à hora em que um pagamento foi registrado, em vez do tempo em que um evento de pagamento atinge o serviço de ingestão de eventos. Além disso, os sistemas distribuídos geograficamente e as latências de rede podem contribuir para tempos de chegada imprevisíveis, tornando o uso de um tempo de aplicativo mais confiável em um aplicativo de streaming. Para esses casos, a cláusula TIMESTAMP BY permite especificar valores de carimbo de data/hora personalizados. O valor pode ser qualquer campo do conteúdo do evento ou expressão do tipo DATETIME. Também há suporte para valores de cadeia de caracteres em conformidade com qualquer um dos formatos ISO 8601 .

Observe que o uso de um carimbo de data/hora personalizado (cláusula TIMESTAMP BY) pode fazer com que o Azure Stream Analytics ingera eventos fora de ordem em relação aos carimbos de data/hora por dois motivos:

  • Os produtores de eventos individuais podem ter relógios de sistema diferentes (e distorcidos).
  • Eventos de produtores de eventos individuais podem ser atrasados em trânsito, por exemplo, por indisponibilidade de rede no site do produtor.

Embora a desordem entre os produtores de eventos possa ser grande, a desordem dentro dos eventos de um único produtor é geralmente pequena ou até mesmo inexistente. Caso uma consulta processe apenas dados de cada produtor de eventos de forma independente, lidar com eventos de cada produtor em seu próprio linha do tempo é mais eficiente do que gerenciar distorções de tempo entre os produtores. O Azure Stream Analytics dá suporte a substreams especificando over <over> spec sub-clause para habilitar o processamento de eventos em linhas do tempo independentes. Consulte 'A cláusula OVER interage com a ordenação de eventos' para obter o impacto que o uso da cláusula OVER tem no processamento do trabalho.

Sintaxe

TIMESTAMP BY scalar_expression [OVER <over spec> ]  
      
<over spec> ::= 
      { column_name | expression } [,...n ]  

Comentários

Recuperando o carimbo de data/hora do evento

O carimbo de data/hora do evento pode ser recuperado na instrução SELECT em qualquer parte da consulta usando a propriedade System.Timestamp().

A cláusula OVER interage com a ordenação de eventos

Quando a cláusula OVER é usada, vários aspectos do processamento de eventos pelo Azure Stream Analytics são modificados:

  1. A tolerância máxima fora de ordem é aplicada em uma tupla de valor único de <sobre especificação>. Ou seja, um evento só será considerado fora de ordem se ele chegar muito fora de ordem em relação a outros eventos do mesmo produtor de eventos.

    Por exemplo, um valor de '0' pode ser usado se eventos do mesmo produtor de eventos são sempre ordenados e resultarão em processamento imediato. Por outro lado, o uso de valores grandes aqui introduzirá atrasos de processamento, enquanto aguarda os eventos fora de ordem serem montados.

  2. A tolerância máxima de chegada tardia é aplicada globalmente (como se OVER não tivesse sido usado). Ou seja, um evento será considerado de chegada tardia se o carimbo de data/hora escolhido (na cláusula TIMESTAMP BY) estiver muito longe de sua hora de chegada.

    Observe que o uso de valores grandes aqui não introduzirá atrasos de processamento e os eventos ainda serão processados imediatamente (ou de acordo com a tolerância máxima fora de ordem). Um valor de vários dias não é irracional. No entanto, o uso de valores excepcionalmente longos pode ter um impacto na quantidade de memória necessária para processar o trabalho.

  3. Os eventos de saída para cada produtor de eventos são gerados conforme são calculados, o que significa que os eventos de saída podem ter carimbos de data/hora fora de ordem; no entanto, eles estarão em ordem dentro de uma tupla de valor único de <sobre especificação>.

Limitações e Restrições

A cláusula TIMESTAMP BY OVER tem as seguintes limitações de uso:

  1. A cláusula TIMESTAMP BY OVER deve ser usada para todas as entradas da consulta ou não é usada para nenhuma delas.

  2. A cláusula TIMESTAMP BY OVER só tem suporte com trabalhos totalmente paralelos ou trabalhos de partição única.

  3. Se o fluxo de entrada tiver mais de uma partição, a cláusula OVER deverá ser usada junto com a cláusula PARTITION BY. A coluna PartitionId deve ser especificada como parte das colunas TIMESTAMP BY OVER.

  4. Se a cláusula TIMESTAMP BY OVER for usada, os nomes de coluna da cláusula deverão ser usados como chave de agrupamento em instruções GROUP BY e em todos os predicados JOIN ao ingressar entre fluxos.

  5. As colunas criadas em uma instrução SELECT ou em qualquer outra cláusula de consulta não podem ser usadas na cláusula TIMESTAMP BY, um campo do conteúdo de entrada deve ser usado. Por exemplo, o resultado de um CROSS APPLY não pode ser usado como o valor de destino do TIMESTAMP BY. No entanto, você pode usar um trabalho do Azure Stream Analytics que executa o CROSS APPLY e usar um segundo trabalho para executar o TIMESTAMP BY.

  6. System.Timestamp() não pode ser usado em TIMESTAMP BY, pois TIMESTAMP BY é o que estabelece o valor de System.Timestamp().

Exemplos

Exemplo 1 – Acessar um campo de carimbo de data/hora do conteúdo

Usar EntryTime o campo do conteúdo como carimbo de data/hora do evento

SELECT  
      EntryTime,  
      LicensePlate,  
      State   
FROM input TIMESTAMP BY EntryTime  

Exemplo 2 – Usar o tempo UNIX do conteúdo como carimbo de data/hora do evento

Os sistemas UNIX geralmente usam o tempo POSIX (ou Época) definido como o número de milissegundos decorridos desde 00:00:00 Hora Universal Coordenada (UTC), quinta-feira, 1 de janeiro de 1970.

Este exemplo mostra como usar o campo numérico 'epochtime' que contém a hora da época como carimbo de data/hora do evento.

SELECT  
      System.Timestamp(),  
      LicensePlate,  
      State  
FROM input TIMESTAMP BY DATEADD(millisecond, epochtime, '1970-01-01T00:00:00Z')  

Exemplo 3 – carimbos de data/hora heterogêneos

Imagine o processamento de fluxos heterogêneos de dados que contêm dois tipos de eventos 'A' e 'B'. Os eventos 'A' têm dados de carimbo de data/hora no campo 'timestampA' e os eventos 'B' têm carimbo de data/hora no campo 'timestampB'.

Este exemplo mostra como gravar TIMESTAMP BY para poder trabalhar com os dois tipos de eventos/carimbos de data/hora.

SELECT  
      System.Timestamp(),  
      eventType,  
      eventValue,  
FROM input TIMESTAMP BY  
      (CASE eventType   
            WHEN 'A' THEN timestampA  
            WHEN 'B' THEN timestampB  
      ELSE NULL END) 

Exemplo 4 – Manipulando várias linhas do tempo em uma consulta particionada

Processe dados de remetentes diferentes (estações de pedágio) sem aplicar políticas de tempo em diferentes IDs de estação de pedágio. Os dados de entrada são particionados com base em TollId.

SELECT
      TollId,
      COUNT(*) AS Count
FROM input
      TIMESTAMP BY EntryTime OVER TollId, PartitionId
      PARTITION BY PartitionId
GROUP BY TUMBLINGWINDOW(minute,3), TollId, PartitionId

Consulte Também

System.Timestamp()
Políticas de Distorção de Tempo
Noções básicas sobre a manipulação de horas no Azure Stream Analytics
Hora do Unix