✅ Azure 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 の基本的なクエリ操作 (フィルター、プロジェクション、集計、結合) によって結果のタイムスタンプがどのように生成されるかを見てみましょう。
Projection
SELECT
Prop1,
Prop2,
Prop3 - Prop4 / 12,
System.Timestamp() t
FROM input
プロジェクションはイベントのタイムスタンプを変更しません。結果のタイムスタンプは入力のタイムスタンプと同じです。
Filter
SELECT *
FROM input
WHERE prop1 > prop2
フィルターによってイベントのタイムスタンプは変更されません。 結果のタイムスタンプは、入力のタイムスタンプと同じです。
時間の経過に伴う GROUP BY
SELECT
userId,
AVG(prop1),
SUM(prop2),
System.Timestamp() t
FROM input
GROUP BY TumblingWindow(minute, 1), userId
集計の結果のタイムスタンプは、この結果が対応する時間枠の終わりです。 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 分です。