次の方法で共有


集計

このトピックの例では、イベント ウィンドウで集計操作を実行する方法を示します。サポートされている集計関数は次のとおりです。

  • 数値ペイロード フィールドの平均 (avg)。

  • ペイロード フィールドの合計 (sum)。

  • ペイロード フィールドの最小値 (min)。

  • ペイロード フィールドの最大値 (max)。

  • イベントの数 (count)。

集計は、セットベースの演算です。つまり、集計ではデータのサブセットを対象として計算が実行されます。このサブセットは、イベント ウィンドウとして指定され、複数のイベントがタイムラインに沿ってグループ化されます。この指定により、集計はウィンドウのみに適用でき、通常のイベント ストリームには適用できません。集計は、CepWindowStream<T> の拡張メソッドとして提供されます。ウィンドウの詳細については、「イベント ウィンドウの使用」を参照してください。

射影演算と同じ構文を使用すると、集計操作の結果がスカラー値のペイロード フィールドになります。ウィンドウに対する集計は増分的に計算されます。つまり、集計ウィンドウに対してイベントの入力または出力が発生すると、前の集計結果が更新されます。これは数値の有効桁数に影響する場合があることに注意してください。

avg、sum、min、および max はすべて、集計する値を表す 1 つの入力パラメーターを受け取ります。通常、これはイベント フィールドへの参照です。次の例に示すとおり、入力パラメーターはラムダ式として指定されています。count 集計は、ウィンドウ内のイベント全体をカウントするので、パラメーターはありません。

NULL 値の処理は、Transact-SQL の類似した関数と一致しています。

  • sum では、NULL は 0 (ゼロ) として処理されます。

  • min では、NULL が最も大きい値になります。

  • max では、NULL が最も小さい値になります。

  • TopK では、ペイロード フィールドに従ってイベントに順序が付けられると、NULL は常に最小値になります。

最小値関数および最大値関数は、数値、辞書 (string)、時間 (datetime) など、比較演算子を実装するすべての型に対して使用できます。

使用例

次の例では、ホッピング ウィンドウ および スナップショット ウィンドウ に定義されたイベントに集計関数を適用する方法を示します。今回のリリースでは、カウント ウィンドウ を組み込み集計および TopK と併用できないことに注意してください。

A. ホッピング ウィンドウでの集計

ホッピング ウィンドウでは、長期にわたり一定の期間と頻度で計算が繰り返されます。たとえば、1 時間以内のイベント データを集計し、5 分ごとに再計算することは、次の例に示すとおり、ウィンドウ サイズが 1h、ホップ サイズが 5min のホッピング ウィンドウに相当します。

// Assuming the following input event type for inputStream:
public class MyPayload 
{ 
    public int i; 
    public float f; 
}
var avgHourly = from win in inputStream.HoppingWindow(TimeSpan.FromHours(1), TimeSpan.FromMinutes(5))
                  select new { hourlyavg = win.Avg(e => e.f) }; 

ウィンドウ演算子が入力ストリームに適用され、CepWindowStream<T> が出力されます。このストリームの各 win 要素は、イベントが含まれるウィンドウを表します。

次の例では、1 時間ごとのイベントをカウントします。この例では、タンブリング ウィンドウを使用します。これは、ホップ サイズがウィンドウ サイズに等しいホッピング ウィンドウへのショートカットになります。

var countHourly = from win in hourStream.TumblingWindow(TimeSpan.FromHours(1))
                  select new { count = win.Count() };

B. スナップショット ウィンドウでの集計

次の例では、from 句によって、スナップショット ウィンドウが inputStream ストリームに適用されます。この例では、Sum 集計結果が e.i ペイロード フィールドに割り当てられ、Avg 集計結果が e.f ペイロード フィールドに割り当てられます。さらに、count 集計が使用されます。また、この例では、1 つのステートメント内で複数の集計を結合する方法も示しています。この集計はすべて、同じウィンドウに関して計算されます。

// Assuming the following input event type for inputStream:
public class MyPayload 
{ 
    public int i; 
    public float f; 
}

// Multiple aggregations over a snapshot window
var snapshotAgg = from w in inputStream.Snapshot()
                  select new { sum = w.Sum(e => e.i),
                               avg = w.Avg(e => e.f),
                               count = w.Count() };

次の例のように、集計を複合式に組み込むことができます。1 つの式に複数の集約を含めることができます。

var result = from w in inputStream.Snapshot()
             select new { ratio = w.Sum(e => e.i) / w.Sum(e => e.f) };

関連項目

概念

タイム スタンプの変更

イベント ウィンドウの使用

ホッピング ウィンドウ

カウント ウィンドウ

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