System.Timestamp () (串流分析)
Azure 串流分析中查詢每個階段的每個事件都有與其相關聯的時間戳記。 System.Timestamp () 是系統屬性,可用來擷取事件的時間戳記。
以下說明 Azure 串流分析如何將時間戳記指派給事件。
輸入事件時間戳記
輸入事件的時間戳記可由資料行值 (或 TIMESTAMP BY 子句中指定的運算式) 定義:
SELECT System.Timestamp() t
FROM input
TIMESTAMP BY MyTimeField
如果未指定指定輸入的 TIMESTAMP BY 子句,則會使用事件的抵達時間做為時間戳記。 例如,事件中樞輸入時,將會使用事件排入佇列的時間。
產生的事件時間戳記
執行計算時,產生的事件的時間戳記是最早可判斷此結果的邏輯時間。
讓我們看看 Azure 串流分析中的基本查詢作業如何 (篩選、投影、匯總和聯結,) 產生結果的時間戳記。
投影
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 串流分析 (視窗處理) 說明 Azure 串流 分析中不同視窗類型的文章。
INNER JOIN
SELECT
System.Timestamp()
FROM input1
JOIN input2
ON DATEDIFF(minute, input1, input2) BETWEEN 0 AND 10
內部聯結會產生對應至 input1 和 input2 中相符事件配對的結果。
代表 input1 和 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 分鐘。