概要
よく使うウィンドウ処理の種類をユースケースとともにまとめます。
ウィンドウ処理
ウィンドウとは集計範囲のことであり、その範囲をどう捉えるか色々な方法があります。
グローバルウィンドウ
一番シンプルな、ウィンドウの区切りがなくすべてのデータが1つのウィンドウに蓄積されるパターンです。
ユースケース
- 全体集計や最終結果の計算
- ストリーミングデータを一括で集計して、システム全体の動作を確認する最終レポート作成時など。
タンブリングウィンドウ
ウィンドウが重ならず、固定の時間間隔やデータ数で区切られた集計範囲です。
各ウィンドウが完全に独立しており、データは一度しかウィンドウに含まれません。
Apache BeamにおけるFixed Time Windowと同じです。
ref: https://learn.microsoft.com/ja-jp/stream-analytics-query/tumbling-window-azure-stream-analytics
ユースケース
ホッピングウィンドウ
ウィンドウが固定時間で一部重なった集計範囲です。
次のスライディングウィンドウと似ていますが、こちらは固定された時間区切りで処理されます。
ref: https://learn.microsoft.com/ja-jp/stream-analytics-query/hopping-window-azure-stream-analytics
メリットとしてスライディングウィンドウより計算負荷が減る一方、スライディングウィンドウよりリアルタイム性が低いです。
ユースケース
一般的にスライディングウィンドウとして解釈されるのはこちらが多く、時間区切りでスライドさせて以下の様なユースケースで利用します。
- リアルタイムモニタリング
- 移動平均、トレンド分析
- レートリミット
スライディングウィンドウ
同様にウィンドウが固定時間で一部重なった集計範囲です。
ただこちらはウィンドウの開始はイベントがウィンドウに入ったり終了した時が基準になります。
ref: https://learn.microsoft.com/ja-jp/stream-analytics-query/sliding-window-azure-stream-analytics
上の図を表現すると以下です。
- 1が来た
- 5が来た
- 9,7が同時に来た
- 1が無くなった
- 5が無くなった
- 9,7が無くなった(not emitted)
- 8が来た
- 8が無くなった(not emitted)
このようにイベント駆動でウィンドウが用意されます。
ユースケース
リアルタイムなデータ処理や、時間的なパターン分析、異常検出、動的な意思決定システムなどのユースケースに適しています。
- リアルタイムモニタリング
- 移動平均、トレンド分析
- レートリミット
セッションウィンドウ
データストリームにおける「活動」や「イベント」のセッションを基にウィンドウを定義します。 ウィンドウサイズが固定の時間幅ではなく、特定のアイドル時間(イベントが発生しない時間)を超えると、新しいセッションウィンドウが始まります。
ref: https://medium.com/@shlomisderot/apache-beam-windows-late-data-and-triggers-e2e856c502b9
ユーザIDなどをキーとして指定することで、各ユーザごとに独立したセッションウィンドウが作れます。
ユースケース
ユースケースはその名の通りユーザーセッションに使えます。
- ユーザーセッションの分析
- アクセスログ・行動ログを元に、ユーザーが一定時間操作しない場合にセッションを区切り、そのセッション内でのページビューやコンバージョンを分析する。
- 可変時間のトランザクション処理
- eコマースサイトで、ユーザーが連続して製品を閲覧している期間を1つのセッションとし、一定時間操作がないとセッションを終了して、次回は新しいウィンドウとして扱う
まとめ
各ウィンドウ処理についてまとめてみました。
Fixed timeウィンドウはタンブリングウィンドウと呼ばれていたり、スライディングウィンドウと思っていたのがホッピングウィンドウだった、といった学びがありました。