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  
  

プロジェクションはイベントのタイムスタンプを変更しません。結果のタイムスタンプは入力のタイムスタンプと同じです。

Assert

SELECT *  
FROM input  
WHERE prop1 > prop2  
  

フィルターはイベントのタイムスタンプを変更しません。 結果のタイムスタンプは、入力のタイムスタンプと同じです。

時間の経過に伴うグループ化

SELECT  
      userId,  
      AVG(prop1),  
      SUM(prop2),  
      System.Timestamp() t  
FROM input  
GROUP BY TumblingWindow(minute, 1), userId  
  

集計の結果のタイムスタンプは、この結果が対応する時間枠の終了です。 Azure Stream Analytics のさまざまなウィンドウの種類について説明している Windowing (Azure Stream Analytics) の記事を参照してください。

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 と e2 のタイムスタンプの最新のタイムスタンプによってタイムスタンプされます。

左外部結合

SELECT  
      System.Timestamp()  
FROM input1  
LEFT JOIN input2  
ON DATEDIFF(minute, input1, input2) BETWEEN -2 AND 10  
  

左外部結合では、2 種類の結果が生成されます。 一部は、input1 と input2 のイベントの一致ペアに対応しています。その他は input1 からのイベントのみに対応し、input2 からの一致するイベントが見つからなかったことを示します。

一致を表すイベント (input1 と input2 の両方を含む) は、一致する入力の最新のタイムスタンプによってタイムスタンプされます (上記の INNER JOIN の場合と同様)。

一致しないイベント (input2 が NULL) は、一致する input2 イベントが発生した可能性がある最新の論理時刻によってタイムスタンプが付きます。 たとえば、上記の例では、input1 のタイムスタンプ + 10 分です。