2016-04-08 8 views
0

をエスパーの使用についてのパズル:私はこのようなEPLを作成+「合計」「でグループ」

`String epl = "select objId,sum(c1) from PmData.win:time_batch(3 sec) group by objId";` 

、それは非常に簡単です:輸出和(C1)は、スライディングウィンドウに3秒ごとになります。

しかし、私がテストを実行すると、結果は私の予想どおりではないようです。間違っているように見えます。スライディングウィンドウに存在しないobjIdをエクスポートします。ここで

は、結果の印刷です:

はOBJID選択し、PmDataからの和(C1)。勝利:OBJID

によってtime_batch(3秒)基

2016年4月8日18時31分16秒

送信イベント:PmData(OBJID = 2、C = 0、時刻= 0)

送信イベント:PmData(OBJID = 0、C1 = 8、時間= 0)

送信イベント:PmData(OBJID = 3、C = 7、時刻= 0)

送信イベント:PmData(OBJID = 0、 c1 = 3、時間= 0)

2016-04-08 18:31:19

イベント更新結果:{OBJID = 0、SUM(C1)= 11}

イベント更新結果:{OBJID = 2、和(C1)= 0}

イベント更新結果:{OBJID = 3、sum(c1)= 7}

----------------上記は第1ウィンドウです---------------- -------------------

送信イベント:PmData(OBJID = 3、C = 5、時間= 0)

送信イベント:PmData(OBJID = 0、c1 = 2、時間= 0)

送信イベント:PmData(OBJID = 1、C1 = 1、時刻= 0)

2016年4月8日十八時31分22秒

イベント更新結果:{OBJID = 0、SUM( C1)= 2}

イベント結果更新:{OBJID = 1、和(C1)= 1}

イベント更新結果:{OBJID = 2、和(C1)= NULL}

events u結果をpdate:{objId = 3、sum(c1)= 5}

----------------第2ウィンドウ----------- ------------------------

送信イベント:PmData(OBJID = 3、C = 4、時刻= 0)

送信イベント:PmData(OBJID = 0、C1 = 6、時刻= 0)

送信イベント:PmData(OBJID = 0、C1 = 3、時刻= 0)

2016年4月8日午後6時31分: 25 イベントの更新結果:{objId = 0、sum(c1)= 9}

イベント更新結果:{OBJID = 1、和(C1)= NULL}

イベント更新結果:{OBJID = 3、SUM(C1)= 4}

----- -----------上記は3番目のウィンドウです-----------------------------------

**なぜ2番目のwindosがobjId = 2をエクスポートするのですか? 2番目のスライドウィンドウにはイベントがありません(objId = 2)。

しかし、私はこのように照会する場合:

String epl = "select objId,sum(c1) from PmData.win:time_batch(3 sec)

結果はOKです**

は誰でも答えることができますか。?

解決策はありますか(「group_by」を使用しないでください)?

答えて

0

イベントがデータウィンドウから削除されると、Esperは、イベントが入力され、どのイベントが削除されるかに応じて、集計に対するすべての変更を出力します。これは、非スライディングバッチ処理を含むすべてのデータウィンドウで同じです。だから、特定のグループがなくなると、その合計はヌルになります。つまり、合計を構成するデータポイントがなくなります。カウント(*)を追加した場合、ゼロになることがわかります。そのような出力は、 "合計(...)がヌルでない"か、コンテキストパーティションを使用して削除できます。

+0

、@ user3613754、thx very mach。私はこの問題を尋ねます。私は問題があります、あなたは私を助けてもらえますか?上記の例のように、私は、スライディングウィンドウ内のobjIdによって、sum(c0)、avg(c1)、max(c2)、min(c3)、最後のイベントのc4、最初のイベントのc5グループを計算します。私は1つのeplでそれらを計算したい。私は次のように書こうとします:String epl = "c1、max(c2)をc2、min(c3)をc3、maxby(fmax(time、c4> 0))。c4としてc4、maxby(fmin(時間、c5> = 0)).c5としてEvent.win:time_batch(5秒)グループからのc5としてobjId "。 c0〜c3はokですが、c4またはc5は常に削除されたスライディングウィンドウから値を取得します。 – alphacome

+0

、@ user3613754ですが、c4またはc5は常に削除されたスライディングウィンドウから値を取得しました。それは私が望んでいない。私は現在のスライディングウィンドウでc4、c5の値を取得します。 – alphacome