悉数输出聚合

问题描述

我想将由相同输入触发的所有查询分组,并在单个事件中输出所有触发的查询。如果event1同时触发query1query2,我想为两者都触发一个事件,例如{... [query1,query2]}。我已经有一种在输出获取触发查询的机制,但是事实证明,聚合输出更加困难。

我最初尝试了以下方法

define stream inStream(eventId string,value int);

        from inStream[ value > 10 ]
        select eventId,value,"value over 10" as message
        insert into #sessionWindow1;

        from inStream[ value > 20 ]
        select eventId,"value over 20" as message
        insert into #sessionWindow1;

        ...

        from #sessionWindow1#window.session(100 milliseconds,eventId)
        select eventId,message
        group by eventId
        insert into outStream;

由同一事件触发的所有查询最终都在最终流的同一窗口中(通过添加计数聚合函数进行验证)。尽管它们仍然不能在一个事件中全部输出。我创建了自己的自定义聚合函数,该函数将所有消息添加到数组中。然后,我根据时间间隔输出最后一条消息。

最终流被重写如下:

from #sessionWindow1#window.session(100 milliseconds,custom:agg(message) as message
        group by eventId
        output last every 100 millisecond
        insert into outStream;

这按预期工作。如果我发送值25,则输出{...["value over 10","value over 20"]}。问题是这很脆弱,因为如果我有足够多的规则来处理所有这些规则所需的时间比会话窗口要长(在这种情况下为100毫秒),则会生成多个输出

是否存在另一种汇总所有输出方法?我看到QueryCallback接受Event[],但似乎从来没有一个以上的事件被调用

这是使用Siddhi 5.1.X

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...