2

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 分であることは問題ではありません)

4

1 に答える 1

1

必要なことは、イベントの期間を取得し、それをクエリで使用することです。残念ながら、それを直接行うことはできません。しかし、それはそれができないという意味ではありません。:-) ここに 1 つのオプションがあります: http://www.devbiker.net/post/How-long-did-that-edge-event-take.aspx。もう 1 つのオプションは、サブジェクトではなく Edge UDSO を使用することです。そのためのドキュメントは次のとおりです。http://technet.microsoft.com/en-us/library/hh290514.aspx. この例では PointStreamOperator を示していますが、EdgeStreamOperator も同じように機能します。この方法を使用する場合は、終了エッジを使用して期間を計算し、yield で結果を返します。2 つの方法のうち、おそらく EdgeStreamOperator の方が優れています。サブジェクトを使用すると、実際には必要のない新しいストリーム タイムラインが作成され (ソースに完全に同期されている場合でも)、UDSO はもう少し効率的になります。

于 2013-09-25T02:56:04.240 に答える