✅ Azure 串流分析
Azure 串流分析中每個查詢階段的每個事件都有與其相關聯的時間戳。 System.Timestamp() 是系統屬性,可用來擷取事件的時間戳。
以下說明 Azure 串流分析如何將時間戳指派給事件。
輸入事件時間戳
輸入事件的時間戳可由 TIMESTAMP BY 子句中指定的資料行值(或表示式)定義:
SELECT System.Timestamp() t
FROM input
TIMESTAMP BY MyTimeField
如果未指定指定輸入的 TIMESTAMP BY 子句,事件抵達時間會當做時間戳使用。 例如,在事件中樞輸入的情況下,將會使用事件加入佇列的時間。
產生的事件時間戳
執行計算時,產生的事件的時間戳是最早可判斷此結果的邏輯時間。
讓我們看看 Azure 串流分析中的基本查詢作業(篩選、投影、匯總和聯結)如何產生結果的時間戳。
Projection
SELECT
Prop1,
Prop2,
Prop3 - Prop4 / 12,
System.Timestamp() t
FROM input
投影不會改變事件的時間戳,結果的時間戳與輸入的時間戳相同。
Filter
SELECT *
FROM input
WHERE prop1 > prop2
篩選不會改變事件的時間戳。 結果的時間戳與輸入的時間戳相同。
依時間範圍分組
SELECT
userId,
AVG(prop1),
SUM(prop2),
System.Timestamp() t
FROM input
GROUP BY TumblingWindow(minute, 1), userId
匯總結果的時間戳是此結果所對應時間範圍結束。 請參閱描述 Azure 串流分析中不同視窗類型的視窗 化 文章。
INNER JOIN
SELECT
System.Timestamp()
FROM input1
JOIN input2
ON DATEDIFF(minute, input1, input2) BETWEEN 0 AND 10
內部聯結會產生對應至 input1 和 input2 中相符事件組的結果。
代表 input1 事件 e1 與 input2 中 e2 事件 e1 相符的事件,是以 e1 和 e2 的時間戳為時間戳。
LEFT OUTER JOIN
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 分鐘。