gpt4 book ai didi

java - 西提 CEP : Aggregate functions with time window don't "remove" values from aggregation

转载 作者:行者123 更新时间:2023-12-01 10:21:09 25 4
gpt4 key购买 nike

使用 Siddhi 3.0.3 作为 Java 库。

我通过扩展 AttributeAggregator 类开发了自定义聚合函数,并且在调用 processRemove() 方法后我看到了一些奇怪的行为。当调用 processRemove() 时,我删除该值并返回新的聚合结果。但是,结果处理程序返回的事件仍然接收旧值。但是,processAdd() 工作正常。经过一些调试后,我注意到每次调用 processAdd() 后,结果事件都包含上次调用 processAdd() 返回的对象。但是,在调用 processRemove() 后,事件包含与之前相同的对象(上次 processAdd() 中的对象),而不是 返回的最后一个对象>processRemove().

如果我维护一个集合,添加从中删除并始终返回相同的集合对象,那么一切都很好。但对于返回数值的聚合函数,每个 processAdd()/processRemove() 返回一个装箱的 Long,它不会被替换为从 processRemove() 返回。

我还注意到使用内置聚合函数 count() 时也会出现同样的行为。

最佳答案

属性聚合器用于执行有状态操作,例如求和、求平均值、对事件集合进行计数(准确地说是窗口)。让我解释一下这些属性聚合器的行为方式。

可以收集事件的Windows发出两种类型的事件。当前和已过期。当前事件是刚刚进入窗口的事件。过期事件是为了给新来的事件腾出空间而过期的事件。因此,在窗口达到其阈值后,它总是会发出过期事件,然后发出当前事件。该过期事件和当前事件将位于同一个EventChunk中,但过期事件将始终位于当前事件的前面。

因此,在查询选择器级别,当我们调用属性聚合器时,将首先调用 processRemove,然后始终调用 processAdd。除非有分组依据,否则查询选择器将仅保留最后一个要作为输出发送的事件。因此,如果您查看查询选择器的输出,您将始终看到最后一个事件,其中有 processAdd 返回的对象。

这是 Siddhi 的默认行为。如果此行为不符合要求,请解释您的要求。我们将能够帮助您!!

问候

关于java - 西提 CEP : Aggregate functions with time window don't "remove" values from aggregation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35609547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com