上周,我问了“ How to express the event de-duplication logics in Siddhi stream processing”问题,建议的解决方案是;
define stream InputStream (event_id string, data string);
define stream OutputStream (event_id string, data string);
define table ProcessedEvents (event_id string);
from InputStream[not(ProcessedEvents.event_id == event_id in ProcessedEvents)]
insert into OutputStream ;
from OutputStream
select event_id
insert into ProcessedEvents ;
from OutputStream#window.time(2 sec)
select event_id
insert expired events into PurgeStream ;
from PurgeStream
delete ProcessedEvents
on ProcessedEvents.event_id == event_id ;
上述解决方案需要一个额外的表和一个额外的流。
我刚刚发现有"unique first" operator。我想知道是否可以使用该运算符在上一个链接中表达我想要的重复数据删除,下面将再次进行描述:
(1)当事件是InputStream中的第一个事件(因为事件处理引擎启动)时,请将事件插入到OutputStream中。
(2)如果具有相同签名的事件(例如,相同的事件名称)在2分钟内到达窗口,则我们认为该事件是相同的,因此不应将事件插入OutputStream。否则,我们应该将事件插入到OutputStream中。
我发现难以使用此“唯一优先”问题是(#window.unique:time):似乎只有过期事件(即重复事件)才能被选择并插入到输出中,但不插入窗口中保留的第一个唯一事件。
有人可以提供关于唯一的第一个运算符是否可以用来表示我的重复数据删除逻辑,同时简化所需查询表达式的见解吗?