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 分鐘。