Stream Analytics ウィンドウ関数の概要
タイム ストリーミング シナリオでは、テンポラル ウィンドウに含まれているデータに対する操作の実行は一般的なパターンです。 Stream Analytics には、ウィンドウ関数に対するネイティブ サポートがあるため、開発者は複雑なストリーム処理ジョブを最小限の作業で作成できます。
選択できる 5 種類のテンポラル ウィンドウには、
ウィンドウ関数は、Stream Analytics ジョブ内のクエリ構文の GROUP BY 句で使用します。 Windows() 関数を使用して、複数のウィンドウにわたってイベントを集計することもできます。
すべてのウィンドウ操作が、ウィンドウの終了時に結果を出力します。 ユーザーは、Stream Analytics ジョブを始めるときに [ジョブ出力の開始時刻] を指定でき、システムは、指定された時刻に最初のウィンドウを出力するため、受信ストリームで以前のイベントを自動的にフェッチします。たとえば、[今すぐ] オプションを指定して始めると、すぐにデータの出力が始まります。 ウィンドウの出力は、使用される集計関数に基づく単一のイベントになります。 出力イベントはウィンドウの終了のタイム スタンプを保持しており、すべてのウィンドウ関数は固定の長さで定義されます。
タンブリング ウィンドウ
データ ストリームを個別の時間セグメントに分割し、それぞれに対して関数を実行するには、タンブリング ウィンドウ関数を使います。
タンブリング ウィンドウの主な違いは次のとおりです。
- 繰り返しません。
- 重複しません。
- イベントは、複数のタンブリング ウィンドウに属することはできません。
この例に対する入力データを次に示します。
Stamp | CreatedAt | TimeZone |
---|---|---|
1 | 2021-10-26T10:15:01 | PST |
5 | 2021-10-26T10:15:03 | PST |
4 | 2021-10-26T10:15:06 | PST |
... | ... | ... |
サンプル クエリを次に示します。
SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)
出力例を次に示します。
WindowEndTime | TimeZone | Count |
---|---|---|
2021-10-26T10:15:10 | PST | 5 |
2021-10-26T10:15:20 | PST | 2 |
2021-10-26T10:15:30 | PST | 4 |
ホッピング ウィンドウ
ホッピング ウィンドウ関数は、一定の期間だけ前に進みます。 それらは、重複することができ、ウィンドウ サイズより頻繁に出力できるタンブリング ウィンドウと考えると簡単です。 イベントは複数のホッピング ウィンドウ結果セットに属することができます。 ホッピング ウィンドウをタンブリング ウィンドウと同じにするには、ホップ サイズをウィンドウ サイズと同じに指定します。
サンプル データを次に示します。
Stamp | CreatedAt | トピック |
---|---|---|
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)
出力例を次に示します。
WindowEndTime | トピック | Count |
---|---|---|
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 つのイベントがあります。 ホッピング ウィンドウと同様に、イベントは複数のスライディング ウィンドウに属することができます。
サンプルの入力データを次に示します。
Stamp | CreatedAt | トピック |
---|---|---|
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 | トピック | Count |
---|---|---|
2021-10-26T10:15:15 | ストリーミング | 4 |
2021-10-26T10:15:20 | ストリーミング | 3 |
セッション ウィンドウ
セッション ウィンドウ関数は、似た時刻に到着したイベントをグループ化して、データが存在しない期間を除外します。 これには、3 つの主要なパラメーターがあります。
- タイムアウト
- 最長期間
- パーティション キー (省略可能)。
セッション ウィンドウは、最初のイベントが発生したときに開始されます。 最後にイベントが取り込まれてから指定されたタイムアウト期間内に別のイベントが発生した場合、ウィンドウはその新しいイベントを含むように拡張されます。 タイムアウト期間内にどのイベントも発生しなかった場合、ウィンドウはタイムアウト時に閉じられます。
指定されたタイムアウトになってもイベントが発生し続けている場合、セッション ウィンドウは最大期間に達するまで拡張を続けます。 最大期間のチェック間隔は、指定された最大期間と同じサイズに設定されます。 たとえば、最大期間が 10 である場合、ウィンドウが最大期間を超えたかどうかに関するチェックは、t = 0、10、20、30 などに発生します。
パーティション キーが指定されている場合、イベントはそのキーでグループ化され、セッション ウィンドウは各グループに独立に適用されます。 このパーティション分割は、ユーザーまたはデバイスごとに異なるセッション ウィンドウが必要な場合に役立ちます。
サンプルの入力データを次に示します。
Stamp | CreatedAt | トピック |
---|---|---|
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 | トピック | Count |
---|---|---|
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 句に追加することでスナップショット ウィンドウを適用できます。
サンプルの入力データを次に示します。
Stamp | CreatedAt | トピック |
---|---|---|
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 | トピック | Count |
---|---|---|
2021-10-26T10:15:04 | ストリーミング | 4 |
2021-10-26T10:15:10 | ストリーミング | 2 |
2021-10-26T10:15:13 | ストリーミング | 1 |
2021-10-26T10:15:22 | ストリーミング | 2 |
次のステップ
次の記事をご覧ください。