スナップショット ウィンドウ (Azure Stream Analytics)

スナップショット ウィンドウでは、同じタイムスタンプを持つイベントがグループ化されます。 特定のウィンドウ関数 (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()

タンブリング ウィンドウスナップショット例

スナップショット ウィンドウの一般的な使用方法は、前のウィンドウ関数を介して 1 つのタイムスタンプでグループ化された後にイベントを集計することです (以下の TumblingWindow など)。

次の例では、同じユーザーが 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())