Share via


カウント ウィンドウ

カウント ウィンドウは、一定期間内に発生した、集計などのセットベースの計算の対象にできるイベントのサブセットを定義します。カウント ウィンドウには、スナップショット ウィンドウのように、固定ウィンドウ サイズがありません。カウント ウィンドウは、そこに含まれるイベントの数によって定義されます。これにより、イベント頻度が不定期的なストリーム内の特定数のイベントにセットベースの演算を適用する必要がある多くのシナリオに対応できます。

ヒントヒント

このバージョンの StreamInsight では、カウント ウィンドウは、ユーザー定義集計またはユーザー定義演算子でのみ使用でき、組み込み集計および TopK では使用できません。

イベント ウィンドウとその StreamInsight での実装および使用に関する一般的な説明については、「イベント ウィンドウの使用」を参照してください。

カウント ウィンドウについて

カウント ウィンドウの可変ウィンドウ サイズは、タイムライン上での個別のイベント開始時刻のカウントで指定されます。カウントが N であるカウント ウィンドウのセットは、N 個 (N は少なくとも 1) の連続したイベント開始時刻を含むすべての時間帯として定義されます。さらに正確に言うと、そのような各時間帯は開始時刻に N 番目の個別のイベントの 1 チックを足したものになります。カウント ウィンドウは、個別の各イベント開始時刻に従ってタイムライン上を移動します。したがって、カウントが実行される間は、新しいイベント開始時刻を指定するイベントを新たに設定するたびに、カウント ウィンドウが新規作成されます。つまり、個別のイベント開始時刻が N より小さければ、ウィンドウは新規作成されません。ホッピング ウィンドウと同様、カウント ウィンドウ間のオフセットはホップ サイズと呼ばれます。ただし、ホッピング ウィンドウとは異なり、一般にカウント ウィンドウのホップ サイズは一定ではありません。

タイムライン上の各イベントに一意のタイムスタンプが付いている場合、その各ウィンドウのイベント数は N に等しくなります。イベント開始時刻が同じになっている複数のイベントの場合、含まれているイベントの数は N より大きくなります。集計をウィンドウに適用する場合、この動作を理解しておくことが重要です。

次の図に、e1、e2、および e3 という 3 つのイベントを含むストリームを示します。縦棒は、これらのイベントによって定義されている、カウント ウィンドウの境界を表します。薄い青のイベント ストリームは、時間の経過と共に移動するイベント ストリームを表します。オレンジ色のボックスは、カウント ウィンドウと、各ウィンドウに含まれているイベントを表します。最初の 2 つの個別のイベント開始時刻は e1 および e2 に属し、最初のカウント ウィンドウは、e1 の開始時刻から e2 の開始時刻に 1 チックを加えた時刻までの期間にわたります。2 番目のウィンドウには e2 および e3 の開始時刻が含まれます。

イベントのカウント ウィンドウ。

この図はウィンドウ内のイベントがウィンドウの入力ポリシーによってクリップされた状態を示していることに注意してください。入力ポリシーは、すべての StreamInsight ウィンドウの場合と同様に、ウィンドウ サイズに合わせてイベントをクリップします。時間を区別する集計または演算子では、イベントの元の有効期限ではなく、このようなウィンドウ内のクリップされたイベントの有効期限が使用されます。

次の図は、1 つの時点でのみ有効なポイント イベントとカウント ウィンドウを示しています。さらに、CountByStartTimeWindow() メソッドがイベントそのものではなく個別のイベント開始時刻をカウントすることも示します。この図は、ポイント イベントのストリームを示しています。縦棒は、ポイント イベントによって定義される、カウント ウィンドウの開始時刻を表します。薄い青のイベント ストリームは、時間の経過と共に移動するイベント ストリームを表します。2 つのイベントは同時に併置されています。オレンジ色のボックスは、カウント ウィンドウと、各ウィンドウに含まれているイベントを表します。2 つの併置イベントは、ウィンドウ パラメーター N では 1 単位としてカウントされます。

カウント ウィンドウ。

ポイント イベントの場合、ウィンドウの終了時刻を定義する際に N 番目のイベントの開始時刻に 1 チックを追加するウィンドウの動作によって、ウィンドウにはすべてのイベントが取り込まれます。

カウント ウィンドウの定義

カウント ウィンドウは、タイムライン上での個別のイベント開始時刻のカウントで指定されます。カウント ウィンドウは、次の例に示すように統合言語クエリ (LINQ) で指定されます。入力ポリシーは常に ClipToWindow であり、出力ポリシーは常に PointAlignToWindowEnd です。

var agg = from w in inputStream.CountByStartTimeWindow(10)
          select new { sum = w.MySum(e => e.i) };

カウント ウィンドウは、現在、組み込み集計では使用できないので、上の例では、ユーザー定義集計 MySum を使用しています。

その他のウィンドウに関しては、このウィンドウ出力ポリシーがセットベースの演算の結果に適用されます。カウント ウィンドウで使用できる出力ポリシーは、ウィンドウの最後にポイント イベントを生成するものだけです。このポイントの時刻のタイムスタンプは、ウィンドウの最後のイベントの開始時刻と一致します。つまり、ポイント イベントはウィンドウの範囲内に存続します。上の図に示す入力の集計を適用すると、出力ストリームは次のようになります。

集計結果のカウント ウィンドウ。

タイムスタンプを含む結果イベントを生成できる、時間を区別するユーザー定義演算子 (UDO) の場合、タイムスタンプは出力ポリシーによって上書きされます。前の図に示されているように、集計の単一の結果イベントと同様で、UDO が返す各イベントは、ポイントがウィンドウの最後のイベントの開始時刻と一致するように、ウィンドウの最後でポイント イベントに変換されます。

関連項目

概念

集計

TopK

ユーザー定義の集計と演算子

ホッピング ウィンドウ

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