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 минут.