UnitId と Start Date で識別される複数の「ユニット」からのポイント データを含むポイント ストリームがある場合:
var input = CepStream<EventPayload>.Create("input", typeof(SQLPayloadInputAdapterFactory), inputConfig, EventShape.Point);
そして、それをインターバルストリームに変換します:
var signal = input
.AlterEventDuration(e => TimeSpan.MaxValue)
.ClipEventDuration(input, (e1, e2) => (e1.UnitID == e2.UnitID));
出力アダプターがイベント オブジェクトを認識し、その開始値と終了値を読み取ることができるため、出力アダプターによって読み取られると、シグナル ストリーム内のイベントの期間を取得できます。
私がする必要があるのは、「シグナル」ストリームを照会して、1 分間のタンブリング ウィンドウで最長のイベントを見つけることです。
var groupWindowQuery = from e in signal
group e by e.UnitID into unitGroups
from window in unitGroups.TumblingWindow(
TimeSpan.FromSeconds(60),
HoppingWindowOutputPolicy.ClipToWindowEnd)
select new
{
id = unitGroups.Key,
count = window.Count(),
};
...カウントなどを含むユニットのグループを提供しますが、イベントの期間を取得して他のクエリに渡すことはできませんgroupWindowQuery
。
イベント プロパティをクエリして、タンブリング ウィンドウで最長のイベントを見つけるにはどうすればよいですか?
または、ペイロードに値を設定して、ポイントから信号ストリームを作成するときにポイント イベントに終了日を与えることはできますか?
(ウィンドウにまたがるイベントの期間が 1 分であることは問題ではありません)