✅ Azure Stream Analytics ✅ Fabric Eventstream
スナップショット ウィンドウでは、同じタイムスタンプを持つイベントがグループ化されます。 特定のウィンドウ関数 ( SessionWindow() など) を必要とする他のウィンドウの種類とは異なり、SYSTEM.Timestamp() を GROUP BY 句に追加することでスナップショット ウィンドウを適用できます。
次の図は、一連のイベントを含むストリームと、それらがスナップショット ウィンドウにどのようにマップされるかを示しています。
System.Timestamp() は、GROUP BY 句でキー列またはスナップショット ウィンドウ定義と見なすことができます。これは、タイムスタンプの等価性に基づいてイベントをウィンドウにグループ化するためです。 別のウィンドウ関数と組み合わせると、System.Timestamp() はウィンドウ定義としてではなくキーとして扱われます。 System.Timestamp() は、GROUP BY 句で複数のウィンドウ関数を使用する場合とは異なり、他のウィンドウ関数で使用してもエラーを生成しません。 GROUP BY で System.Timestamp() とウィンドウ関数の両方を使用すると、結果をバッチ処理するのに役立ちます。
System.Timestamp() を含む式は、ウィンドウとは見なされません。 たとえば、 GROUP BY DATEPART(minute, System.Timestamp())
は"ウィンドウを指定する必要があります" というエラーで失敗します。
構文
System.Timestamp()
例示
基本的な例
次の例では、まったく同時に発生する同じトピックの種類のツイートの数を返します。
SELECT Topic, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
タンブリング ウィンドウスナップショットの例
スナップショット ウィンドウの一般的な使用方法は、前のウィンドウ関数 (以下の TumblingWindow など) を介して 1 つのタイムスタンプにグループ化された後にイベントを集計することです。
次の例では、同じユーザーが 30 分以内に同じトピックの種類を持つツイートの数を返します。
WITH PerInterval AS (
SELECT Topic, User, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval
同じ間隔でトピックごとのユーザー数と合計ツイート数を検索するには、前のクエリの結果を使用できます。 タンブリング ウィンドウの結果はすべてタイムスタンプが 30 分の境界にアラインされるため、スナップショット ウィンドウを使用して各境界でイベントを返すことができます。これらはすべて同じタイムスタンプ値を持っているためです。
SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()
前のクエリでは、同じ 30 分間隔内のユーザー数とトピックごとの合計ツイート数が返されました。 2 時間に 1 回同じ結果を得るには、GROUP BY 句に 2 時間のタンブリング ウィンドウを追加します。
次のクエリは、各 2 時間の最後にある 4 つの 30 分間隔すべてから結果を返します。
SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)
集計ウィンドウの例
System.Timestamp() は、集計 Windows() コンストラクトのウィンドウの 1 つとして使用できます。
SELECT
TollId,
COUNT(*)
FROM Input TIMESTAMP BY EntryTime
GROUP BY
TollId,
Windows(
TumblingWindow(minute, 10),
TumblingWindow(minute, 20),
System.Timestamp())