System.Timestamp() (Stream Analytics)

С каждым событием на каждом этапе запроса в Azure Stream Analytics связана метка времени. System.Timestamp() — это системное свойство, которое можно использовать для получения метки времени события.

Ниже описано, как Azure Stream Analytics назначает метки времени событиям.

Метка времени входных событий

Метка времени входного события может быть определена значением столбца (или выражением), указанным в предложении TIMESTAMP BY :

SELECT System.Timestamp() t   
FROM input   
TIMESTAMP BY MyTimeField  
  

Если предложение TIMESTAMP BY не указано для заданных входных данных, в качестве метки времени используется время поступления события. Например, время постановки события в очередь будет использоваться в случае входных данных концентратора событий.

Результирующая метка времени события

При выполнении вычислений метка времени результирующего события — это самое раннее логическое время, в которое можно определить этот результат.

Давайте посмотрим, как базовые операции запросов в Azure Stream Analytics (фильтры, проекции, агрегаты и соединения) создают метки времени для результата.

Проекция

SELECT  
      Prop1,  
      Prop2,  
      Prop3 - Prop4 / 12,
      System.Timestamp() t  
FROM input  
  

Проекции не изменяют метку времени события, метка времени результата совпадает с меткой времени входных данных.

Фильтр

SELECT *  
FROM input  
WHERE prop1 > prop2  
  

Фильтры не изменяют метку времени события. Метка времени результата совпадает с меткой времени входных данных.

GROUP BY с течением времени

SELECT  
      userId,  
      AVG(prop1),  
      SUM(prop2),  
      System.Timestamp() t  
FROM input  
GROUP BY TumblingWindow(minute, 1), userId  
  

Метка времени результата статистического вычисления — это конец временного окна, которому соответствует этот результат. См. статьи о windowsing (Azure Stream Analytics), описывающие различные типы окон в Azure Stream Analytics.

INNER JOIN

SELECT  
      System.Timestamp()  
FROM input1  
JOIN input2  
ON DATEDIFF(minute, input1, input2) BETWEEN 0 AND 10  
  

Внутреннее соединение дает результаты, соответствующие соответствующим парам событий из input1 и input2.

Событие, представляющее совпадение события e1 из input1 и e2 из input2, имеет метку времени по последней из меток времени e1 и e2.

ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ

SELECT  
      System.Timestamp()  
FROM input1  
LEFT JOIN input2  
ON DATEDIFF(minute, input1, input2) BETWEEN -2 AND 10  
  

Лево-внешнее соединение дает результаты двух типов. Некоторые соответствуют паре событий из input1 и input2; другие соответствуют только событию из input1 и указывают, что соответствующее событие из input2 не найдено.

События, представляющие совпадение (имеют как input1, так и input2), имеют метку времени по последним меткам времени соответствующих входов (как в случае с INNER JOIN выше).

События, представляющие несовпадения (input2 — NULL), имеют метку времени по последнему логическому времени, в которое могло произойти соответствующее событие input2. Например, в приведенном выше примере это метка времени input1 + 10 минут.