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 分です。