次の方法で共有


スナップショット ウィンドウ

✅ 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())