次の方法で共有


Stream Analytics ウィンドウ関数の概要

タイム ストリーミング シナリオでは、一般的なパターンは、テンポラル ウィンドウに含まれるデータに対して操作を実行することです。 Stream Analytics にはウィンドウ関数のネイティブ サポートがあるため、最小限の労力で複雑なストリーム処理ジョブを作成できます。

テンポラル ウィンドウには、次の 5 種類があります。

Stream Analytics ジョブのクエリ構文の GROUP BY 句でウィンドウ関数を使用します。 Windows () 関数を使用して、複数のウィンドウでイベントを集計することもできます。

すべてのウィンドウ操作の出力結果は、ウィンドウの最後に表示されます。 ストリーム分析ジョブを開始するときに、 ジョブ出力の開始時刻を指定できます。 システムは、受信ストリーム内の以前のイベントを自動的にフェッチして、指定された時刻に最初のウィンドウを出力します。 たとえば、[ 今すぐ ] オプションで開始すると、データの出力がすぐに開始されます。 ウィンドウの出力は、使用される集計関数に基づく 1 つのイベントです。 出力イベントにはウィンドウの末尾のタイムスタンプがあり、すべてのウィンドウ関数は固定長で定義されます。

Stream Analytics ウィンドウ関数の概念を示す図。

タンブリング ウィンドウ

タンブリング ウィンドウ関数を使用して、データ ストリームを個別の時間セグメントに分割し、それらに対して関数を実行します。

タンブリング ウィンドウの主な差別化要因は次のとおりです。

  • これらは繰り返されません。
  • 重複しません。
  • イベントは、複数のタンブリング ウィンドウに属することはできません。

Stream Analytics タンブリング ウィンドウの例を示す図。

この例の入力データを次に示します。

切手 作成日時 TimeZone
1 2021-10-26T10:15:01 太平洋標準時 (PST)
5 2021-10-26T10:15:03 太平洋標準時(PST)
4 2021-10-26T10:15:06 太平洋標準時
... ... ...

サンプル クエリを次に示します。

SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)

出力例を次に示します。

WindowEndTime TimeZone 数える
2021-10-26T10:15:10 PST 5
2021-10-26T10:15:20 太平洋標準時 (PST) 2
2021-10-26T10:15:30 太平洋標準時 4

ホッピング ウィンドウ

ホッピング ウィンドウ関数は、一定の期間ずつ前方にホップします。 それらは、ウィンドウ サイズよりも重なり合って出力される可能性があるタンブリング ウィンドウと考えるのが簡単な場合があります。 イベントは、複数のホッピング ウィンドウの結果セットに属することができます。 ホッピング ウィンドウをタンブリング ウィンドウと同じにするには、ホップ サイズをウィンドウ サイズと同じに指定します。

ホッピング ウィンドウの例を示す図。

サンプル データを次に示します。

切手 作成日時 トピック
1 2021-10-26T10:15:01 ストリーミング
5 2021-10-26T10:15:03 ストリーミング
4 2021-10-26T10:15:06 ストリーミング
... ... ...

サンプル クエリを次に示します。

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)

出力例を次に示します。

ウィンドウ終了時間 トピック 数える
2021-10-26T10:15:10 ストリーミング 5
2021-10-26T10:15:15 ストリーミング 3
2021-10-26T10:15:20 ストリーミング 2
2021-10-26T10:15:25 ストリーミング 4
2021-10-26T10:15:30 ストリーミング 4

スライディング ウィンドウ

スライド ウィンドウは、タンブリング ウィンドウやホッピング ウィンドウとは異なり、ウィンドウの内容が実際に変更された時点についてのみイベントを出力します。 つまり、イベントがウィンドウに出入りしたときです。 そのため、すべてのウィンドウに少なくとも 1 つのイベントがあります。 ホッピング ウィンドウと同様に、イベントは複数のスライディング ウィンドウに属することができます。

スライディング ウィンドウの例を示す図。

入力データの例を次に示します。

スタンプ 作成日時 トピック
1 2021-10-26T10:15:10 ストリーミング
5 2021-10-26T10:15:12 ストリーミング
9 2021-10-26T10:15:15 ストリーミング
7 2021-10-26T10:15:15 ストリーミング
8 2021-10-26T10:15:27 ストリーミング

サンプル クエリを次に示します。

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3

アウトプット:

WindowEndTime トピック 数える
2021-10-26T10:15:15 ストリーミング 4
2021-10-26T10:15:20 ストリーミング 3

セッション ウィンドウ

セッション ウィンドウ関数は、同様の時刻に到着するイベントをグループ化します。 データがない期間を除外します。 セッション ウィンドウ関数には、次の 3 つの主要なパラメーターがあります。

  • Timeout
  • 最大期間
  • パーティション キー (省略可能)。

Stream Analytics セッション ウィンドウのサンプルを示す図。

セッション ウィンドウは、最初のイベントが発生したときに開始されます。 最後に取り込まれたイベントから指定されたタイムアウト内に別のイベントが発生した場合、ウィンドウは新しいイベントを含むように拡張されます。 それ以外の場合、タイムアウト内にイベントが発生しない場合は、タイムアウト時にウィンドウが閉じます。

指定されたタイムアウト内にイベントが発生し続ける場合、セッション ウィンドウは最大期間に達するまで延長され続けます。 最大期間チェック間隔は、指定された最大期間と同じサイズです。 たとえば、最大期間が 10 の場合、ウィンドウが最大期間を超えているかどうかの確認は、その時点で t = 0、10、20、30 などで行われます。

パーティション キーを指定すると、関数はキーごとにイベントをグループ化し、セッション ウィンドウを各グループに個別に適用します。 このパーティション分割は、ユーザーやデバイスごとに異なるセッション ウィンドウが必要な場合に便利です。

入力データの例を次に示します。

切手 作成日時 トピック
1 2021-10-26T10:15:01 ストリーミング
2 2021-10-26T10:15:04 ストリーミング
3 2021-10-26T10:15:13 ストリーミング
... ... ...

サンプル クエリを次に示します。

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)

アウトプット:

WindowEndTime トピック 数える
2021-10-26T10:15:09 ストリーミング 2
2021-10-26T10:15:24 ストリーミング 4
2021-10-26T10:15:31 ストリーミング 2
2021-10-26T10:15:39 ストリーミング 1

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

同じタイムスタンプを持つスナップショット ウィンドウ グループ イベント。 特定のウィンドウ関数 (SessionWindow() など) を必要とする他のウィンドウの種類とは異なり、System.Timestamp()句にGROUP BYを追加することでスナップショット ウィンドウを適用できます。

サンプルの Steam Analytics スナップショット ウィンドウを示す図。

入力データの例を次に示します。

切手 作成日時 トピック
1 2021-10-26T10:15:04 ストリーミング
2 2021-10-26T10:15:04 ストリーミング
3 2021-10-26T10:15:04 ストリーミング
... ... ...

サンプル クエリを次に示します。

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

出力例を次に示します。

WindowEndTime トピック 数える
2021-10-26T10:15:04 ストリーミング 4
2021-10-26T10:15:10 ストリーミング 2
2021-10-26T10:15:13 ストリーミング 1
2021-10-26T10:15:22 ストリーミング 2

次のステップ

次の記事をご覧ください。