我创建了一个这样的epl:
`String epl = "select objId,sum(c1) from PmData.win:time_batch(3 sec) group by objId";`
非常简单:在滑动窗口中每3秒输出一次(c1)结果。
但是当我运行测试时,结果并不像我预期的那样,似乎是错误的:它导出滑动窗口中不存在的objId。
以下是结果打印:
通过objId从PmData.win:time_batch(3秒)组中选择objId,sum(c1)
2016-04-08 18:31:16
发送事件:PmData(objId = 2,c1 = 0,时间= 0)
发送事件:PmData(objId = 0,c1 = 8,时间= 0)
发送事件:PmData(objId = 3,c1 = 7,时间= 0)
发送事件:PmData(objId = 0,c1 = 3,时间= 0)
2016-04-08 18:31:19
事件更新结果:{objId = 0,sum(c1)= 11}
事件更新结果:{objId = 2,sum(c1)= 0}
事件更新结果:{objId = 3,sum(c1)= 7}
----------------上面是第一个窗口--------------------------- --------
发送事件:PmData(objId = 3,c1 = 5,时间= 0)
发送事件:PmData(objId = 0,c1 = 2,时间= 0)
发送事件:PmData(objId = 1,c1 = 1,时间= 0)
2016-04-08 18:31:22
事件更新结果:{objId = 0,sum(c1)= 2}
事件更新结果:{objId = 1,sum(c1)= 1}
事件更新结果:{objId = 2,sum(c1)= null}
事件更新结果:{objId = 3,sum(c1)= 5}
----------------上面是第二个窗口--------------------------- --------
发送事件:PmData(objId = 3,c1 = 4,时间= 0)
发送事件:PmData(objId = 0,c1 = 6,时间= 0)
发送事件:PmData(objId = 0,c1 = 3,时间= 0)
2016-04-08 18:31:25 事件更新结果:{objId = 0,sum(c1)= 9}
事件更新结果:{objId = 1,sum(c1)= null}
事件更新结果:{objId = 3,sum(c1)= 4}
----------------上面是第3个窗口--------------------------- --------
**为什么第二个windos导出objId = 2' s?第二个滑动窗口没有事件(objId = 2)。
但是当我这样查询时:
String epl = "select objId,sum(c1) from PmData.win:time_batch(3 sec)
结果还可以。**
有人能回答吗?
是否有解决方案(不使用" group_by")?
答案 0 :(得分:0)
当事件从数据窗口中删除时,Esper会输出对聚合的所有更改,例如" sum"根据事件输入以及删除哪些事件进行聚合。所有数据窗口都是相同的,包括非滑动批处理窗口。因此,当某个群体消失时,其总和将变为空,这意味着没有更多的数据点构成总和。如果你添加了count(*),你会看到它变为零。这样的输出可以用&#34去除;总和(...)不是空的"或者使用上下文分区。