我想用Siddhi按时间分组数据。我有一个基于https://docs.wso2.com/display/SP400/Incremental+Analysis的测试。
@App:name("DataAggregation")
@App:description("Incremental aggregation")
define stream InputStream (sensorid long, value double, timestamp long);
@store( type="rdbms", jdbc.url="jdbc:mysql://localhost:3306/test", username="root", password="xxx", jdbc.driver.name="com.mysql.jdbc.Driver")
define aggregation DataAggregation from InputStream select sensorid, sum(value) as total group by sensorid aggregate by timestamp every hour ... month;我发送多个事件:
sensorid:1, value: 1.0, timestamp:2018-09-10 01:00
sensorid:1, value: 2.0, timestamp:2018-09-10 02:00
...
sensorid:1, value: 23.0, timestamp:2018-09-10 23:00
sensorid:1, value: 24.0, timestamp:2018-09-11 00:00
sensorid:1, value: 25.0, timestamp:2018-09-11 01:00
...Siddhi保存每小时的数据,并计算每日数据。如果我发送一些八月份的事件:
sensorid:1, value: 10.0, timestamp:2018-08-10 01:00
sensorid:1, value: 20.0, timestamp:2018-08-10 02:00
...
sensorid:1, value: 230.0, timestamp:2018-08-10 23:00
sensorid:1, value: 240.0, timestamp:2018-08-11 00:00
sensorid:1, value: 250.0, timestamp:2018-08-11 01:00为什么八月的事件被忽略了,Siddhi没有存储它们?
谢谢
发布于 2018-09-11 03:07:27
在Siddhi 4.x.x - 4.1.x (用于流处理器4.0.0 - 4.2.0)中,增量聚合乱序事件处理使用最低粒度的缓冲区进行处理。在上面的聚合中,它是针对小时的。但是,在您的注释定义中没有定义@BufferSize注释,因此所有乱序事件都会被删除。在您的情况下,乱序事件晚了一个月,这些事件不能通过使用缓冲区来处理。
请尝试在WSO2 SP 4.3.0-rc1中使用相同的注释,它使用最新的Siddhi 4.2.x,其中乱序事件是在内部计算的,没有使用缓冲区。因此,上面的场景将提供准确的聚合。请注意,WSO2 SP 4.3.0 GA仅在9月15日发布,上面的包只是一个候选版本,但可以用于试用。
https://stackoverflow.com/questions/52256525
复制相似问题