共用方式為


System.Timestamp()

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