イベント ウィンドウの使用
リアルタイムのイベントを処理するアプリケーションでは、一般的に、一定期間内に発生するイベントのサブセットに対してセットベースの計算 (集計) などの演算を実行する必要があります。このようなイベントのサブセットは、StreamInsight ではウィンドウで定義されます。このトピックでは、ウィンドウとそれを定義する方法について説明し、StreamInsight でサポートされているウィンドウの種類を示します。また、さまざまな演算子でウィンドウを使用する方法についても説明します。
このセクションの内容
ウィンドウの種類
ウィンドウに対する操作
ウィンドウについて
ウィンドウには、タイムラインに沿ったイベント データが含まれており、そのウィンドウ内のイベントに対してさまざまな演算を実行することができます。たとえば、次の図に示すように、ウィンドウ内のペイロード フィールドの値を合計することもできます。
上の図は、ホッピング ウィンドウがどのようにイベント ストリームに適用され、集計がどのようにウィンドウ ストリームに適用されるかを示しています。集約結果を含むイベントの形状は、ウィンドウ出力ポリシーによって異なります。ここでは、ウィンドウの終了時にポイント イベントによって表されます。
ウィンドウ演算によってイベント ストリームがウィンドウ ストリーム (CepWindowStream<T>) に変換され、それがセットベースの演算の基礎となります。タイムライン上の各ウィンドウがイベントのセットを表します。ウィンドウには時間ベースとカウントベースの 2 種類があり、使用するウィンドウの種類によってイベントの配置方法が決まります。各ウィンドウの種類は、ウィンドウ演算子によって表されます。
セットベースの演算によって、ウィンドウのストリームがイベントのストリーム (CepStream<T>) に戻ります。このようなセットベースの演算は、次の 2 つのグループに分けられます。
入力イベントのセットに対してスカラーの結果を生成する集計。
入力イベントのセットに対して 0 個以上の出力イベントを生成する演算。
最初のグループの例としては、sum、avg、count、およびユーザー定義集計などがあります。このような集計の 1 つ以上をウィンドウ ストリームに適用することで、1 つの結果イベントを各入力ウィンドウに対応させることができます。このとき、スカラー集計の結果を、取得されるイベント ペイロードのフィールドとして使用できます。たとえば、ウィンドウ内の 1 つ以上のペイロード フィールドの値を合計し、その値に基づいて、追加の処理を行ったり、その集計データを含む別のイベント ストリームを作成したりできます。
2 番目のグループの例としては、TopK やユーザー定義演算子などがあります。これらはウィンドウ ストリームに対して定義され、計算の結果、0 個以上の複数のイベントがウィンドウごとに生成されます。たとえば、TopK 演算子を使用して、特定の入力ストリームに対して定義されている各スナップショット ウィンドウから上位 5 つのイベントを取得したり、追加処理用に新しいイベント ストリームを生成したりできます。
ウィンドウ ストリームのイベントをセットベースの演算子に渡すときや、イベントをセットベースの演算子からストリームに再度出力するときには、そのタイム スタンプを変換することができます。このような変換をそれぞれ、入力ポリシーおよび出力ポリシーといいます。これらのポリシーは、イベントがウィンドウでどのように表現されるか、およびセットベースの演算結果がどのようにストリーミングされるかに影響を与えます。
StreamInsight では、以下のウィンドウの種類がサポートされています。
ウィンドウの指定
次の図に示すように、ウィンドウの指定は 3 つの部分で構成されています。
ウィンドウの定義 (ホッピング ウィンドウの時間帯、カウントベースのウィンドウのカウント、スナップショット ウィンドウにはパラメーターなし)
入力の一時的な変換 (入力ポリシー)
出力の一時的な変換 (出力ポリシー)
この図では、ウィンドウ最上部でセットベースの演算を行ったときのストリーム変換を概念的に説明しています。
ポイント A では、イベントのストリームがウィンドウ演算子に入力されます。
ポイント B では、ウィンドウ演算子によってウィンドウのストリームが作成されます。各ウィンドウにはイベントのセットが含まれています。これらのイベントの有効期限は、入力ポリシーに従って変更されることがあります。イベントのストリームは、集計などのセットベースの演算子、またはユーザー定義の演算子に対する入力となります。
ポイント C では、セットベースの演算子が各ウィンドウを処理し、イベントのストリームを出力として生成します。
集計では、セットごとに 1 つのイベントが作成されます (ウィンドウが空の場合は 0 個のイベントになります)。集計ではスカラー値のみが指定されるため、出力イベントの有効期限は既定でウィンドウの時間帯に設定されます。これは組み込み集計やユーザー定義集計の結果に適用されます。
ユーザー定義の演算子および TopK では、0 個以上のイベントが作成されます。時間を区別する UDO でも出力イベントの有効期限が指定されます。時間を区別しない UDO および TopK 演算子では、出力イベントの有効期限は既定でウィンドウの時間帯に設定されます。
ポイント D では、出力ポリシーを出力イベントに適用できます。これによりクエリ作成者はイベントの一時プロパティを変更し、セットベース演算子で作成された既定の有効期限値をオーバーライドすることができます。
プログラム上では、図の 3 つの白いボックスはウィンドウ演算子のパラメーターとして表されます。
ウィンドウ ポリシー
ウィンドウ演算子は、セットベースの操作で必要な入力となる、ウィンドウのストリームを作成します。時間やカウントといったウィンドウ自体の定義とは別に、クエリ作成者は、1) ウィンドウに含まれるイベントをセットベースの演算に渡したときにウィンドウ演算がそれらのイベントの有効期限にどのような影響を与え、2) 演算の結果イベントの有効期限がどのように調整されるかを指定できます。
どちらのポリシーも、クエリの作成者がウィンドウに対する集計または UDO の既定のタイムスタンプを制御またはオーバーライドする目的で、ウィンドウ演算子の一部として指定します。
入力ポリシー
このリリースでは、StreamInsight はウィンドウ内のイベントの開始時刻と終了時刻がいずれもウィンドウの開始時刻と終了時刻に設定される単一の入力ポリシーをサポートしています。したがって、(時間を区別する) セットベースの演算は、元のイベントが入力ポリシーの適用前にはウィンドウの外側で重複していたとしても、ウィンドウ内部のイベント タイプスタンプだけを対象とします。
入力ポリシーの指定はオプションです。便宜を図るために、WindowInputPolicy クラスには対応するインスタンスを返す静的プロパティ (WindowInputPolicy.ClipToWindow) が用意されています。
出力ポリシー
このリリースでは、StreamInsight は次の出力ポリシーをサポートしています。
スナップショット ウィンドウ: 結果イベントの終了時刻がウィンドウの終了時刻に設定されます。
ホッピング ウィンドウでは、次の 2 つの出力ポリシーがサポートされます。
結果イベントは、ウィンドウの終了時刻に対応するポイント イベントです。
結果イベントの終了時刻がウィンドウの終了時刻に設定されます。
カウント ウィンドウ: ウィンドウの最後に結果イベントがポイント イベントに変換されます。
ウィンドウの種類ごとに異なる出力ポリシー クラスが存在します。便宜を図るために、それぞれの出力ポリシー クラスに、対応するインスタンスを返す静的プロパティが用意されています。
SnapshotWindowOutputPolicy.Clip (指定しない場合の既定値)
HoppingWindowOutputPolicy.ClipToWindowEnd
HoppingWindowOutputPolicy.PointAlignToWindowEnd (指定しない場合の既定値)
CountWindowOutputPolicy.PointAlignToWindowEnd (指定しない場合の既定値)
使用できるすべてのウィンドウと、セットベースの演算の結果に対する影響の要約を以下に示します。
スナップショット ウィンドウ:
出力ポリシー: 常に "ウィンドウの最後にクリップする"
出力の有効期間:
ClipToWindowEnd |
|
---|---|
組み込み集計 |
ウィンドウ サイズ |
TopK |
ウィンドウ サイズ |
時間を区別しない UDA |
ウィンドウ サイズ |
時間を区別しない UDO |
ウィンドウ サイズ |
時間を区別する UDA/UDO |
スナップショット ウィンドウに対しては不適用 |
ホッピング ウィンドウ:
出力ポリシー: "ウィンドウの最後にクリップする" または "PointAlignToWindowEnd"
出力の有効期間:
ClipToWindowEnd |
PointAlignToWindowEnd |
|
---|---|---|
組み込み集計 |
ウィンドウ サイズ |
ウィンドウの最後のポイント |
TopK |
ウィンドウ サイズ |
ウィンドウの最後のポイント |
UDA |
ウィンドウ サイズ |
ウィンドウの最後のポイント |
UDO |
ウィンドウ サイズ |
ウィンドウの最後のポイント |
時間を区別する UDO |
返された有効期間、ウィンドウの最後へのクリップ |
ウィンドウの最後のポイント |
カウント ウィンドウ:
出力ポリシー: 常に "ウィンドウの最後をポイントする"
出力の有効期間:
PointAlignToWindowEnd |
|
---|---|
組み込み集計 |
カウント ウィンドウに対しては不適用 |
TopK |
カウント ウィンドウに対しては不適用 |
UDA |
ウィンドウの最後のポイント |
UDO |
ウィンドウの最後のポイント |
時間を区別する UDO |
ウィンドウの最後のポイント |