1

siddhi 3.0.3 を Java ライブラリとして使用する

タイム ウィンドウで group by を使用すると、予期しない動作が発生します。一般的な問題は、グループの正しい集計結果が得られることですが、グループごとではなく、イベントごとに 1 つの集計結果を受け取ります。

具体的には、

時間枠なしで、次のクエリを使用します。

@info(name = 'RealTimeQuery') from MyEventStream
select EventName as EventName, count() as Count, avg(ElapsedTime) as Avg_ElapsedTime
group by EventName output snapshot every 30 seconds insert into CEP_Result;

適切なカウントと平均で、一意の EventName ごとに 1 つの結果が得られます。したがって、私の例では、15 の一意の EventName があり、それぞれの一意の EventName が 10 回発生し、合計 150 のイベントになります。EventName ごとに 1 つずつ、合計 15 の結果が得られます。予想どおり、それぞれのカウントは 10 で、正しい平均が得られます。

ただし、このクエリに時間枠を追加すると、次のようになります。

@info(name = 'RealTimeQuery') from MyEventStream#window.time(2 minutes)
select EventName as EventName, count() as Count, avg(ElapsedTime) as Avg_ElapsedTime
group by EventName output snapshot every 30 seconds insert into CEP_Result;

各 EventName の結果は、正しいカウントと平均を持っているため、正確です。ただし、EventName ごとに 1 つの結果ではなく、合計 150 の結果の 10 を取得します。

Esper を Siddhi に置き換えることを検討しているため、Esper を介して同様のクエリを実行し、Esper を使用して、どちらの場合も、EventName ごとに 1 つの結果の期待される出力を受け取りました。

4

1 に答える 1

2

これは、タイム ウィンドウの代わりにタイム バッチ ウィンドウ [1] を使用して並べ替えることができます。タイム ウィンドウは、イベントの受信時間とトリガーからウィンドウ時間を逆方向に計算するスライディング ウィンドウです。バッチ ウィンドウでは、最初のイベントの到着からウィンドウを計算し、期限切れになるとすべてのイベントを送信します。WSO2 CEP 製品の Siddhi Try it [2] ツールを使用して、Siddhi クエリでイベントをシミュレートできます。

[1] https://docs.wso2.com/display/CEP400/Inbuilt+Windows#InbuiltWindows-timeBatchtimeBatch

[2] https://docs.wso2.com/display/CEP400/Siddhi+Try+It+Tool

于 2016-02-26T11:58:55.493 に答える