Carpe Diem

備忘録

ウィンドウ処理の種類

概要

よく使うウィンドウ処理の種類をユースケースとともにまとめます。

ウィンドウ処理

ウィンドウとは集計範囲のことであり、その範囲をどう捉えるか色々な方法があります。

グローバルウィンドウ

一番シンプルな、ウィンドウの区切りがなくすべてのデータが1つのウィンドウに蓄積されるパターンです。

ユースケース

  • 全体集計や最終結果の計算
    • ストリーミングデータを一括で集計して、システム全体の動作を確認する最終レポート作成時など。

タンブリングウィンドウ

ウィンドウが重ならず、固定の時間間隔やデータ数で区切られた集計範囲です。 各ウィンドウが完全に独立しており、データは一度しかウィンドウに含まれません。
Apache BeamにおけるFixed Time Windowと同じです。

ref: https://learn.microsoft.com/ja-jp/stream-analytics-query/tumbling-window-azure-stream-analytics

ユースケース

  • 時間区切りの集計やバッチ処理
    • データを連続的に処理する必要があるが、古いデータとの重複を避けたい場合
    • 1日毎の売上集計やログのバッチ処理など
  • 固定時間のデータ集計
    • エネルギー消費量を10分ごとに測定

ホッピングウィンドウ

ウィンドウが固定時間で一部重なった集計範囲です。
次のスライディングウィンドウと似ていますが、こちらは固定された時間区切りで処理されます。

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. 1が来た
  2. 5が来た
  3. 9,7が同時に来た
  4. 1が無くなった
  5. 5が無くなった
  6. 9,7が無くなった(not emitted)
  7. 8が来た
  8. 8が無くなった(not emitted)

このようにイベント駆動でウィンドウが用意されます。

ユースケース

リアルタイムなデータ処理や、時間的なパターン分析、異常検出、動的な意思決定システムなどのユースケースに適しています。

  • リアルタイムモニタリング
  • 移動平均、トレンド分析
  • レートリミット

セッションウィンドウ

データストリームにおける「活動」や「イベント」のセッションを基にウィンドウを定義します。 ウィンドウサイズが固定の時間幅ではなく、特定のアイドル時間(イベントが発生しない時間)を超えると、新しいセッションウィンドウが始まります。

ref: https://medium.com/@shlomisderot/apache-beam-windows-late-data-and-triggers-e2e856c502b9

ユーザIDなどをキーとして指定することで、各ユーザごとに独立したセッションウィンドウが作れます。

ユースケース

ユースケースはその名の通りユーザーセッションに使えます。

  • ユーザーセッションの分析
    • アクセスログ・行動ログを元に、ユーザーが一定時間操作しない場合にセッションを区切り、そのセッション内でのページビューやコンバージョンを分析する。
  • 可変時間のトランザクション処理
    • eコマースサイトで、ユーザーが連続して製品を閲覧している期間を1つのセッションとし、一定時間操作がないとセッションを終了して、次回は新しいウィンドウとして扱う

まとめ

各ウィンドウ処理についてまとめてみました。

Fixed timeウィンドウはタンブリングウィンドウと呼ばれていたり、スライディングウィンドウと思っていたのがホッピングウィンドウだった、といった学びがありました。

参考