Siddhi查询具有条件的顺序事件

时间:2018-09-13 19:12:55

标签: complex-event-processing siddhi

我正在尝试编写查询(不确定是否可能),形式为“如果某人具有值X,则在接下来的5秒钟内其下一个值不能为值Y”

我的两次尝试是:

顺序:

define stream inStream(person string, value string); 
            from every s1=inStream[value == 'X'],  
            s2=inStream[person == s1.person and value == 'Y'] within 5 sec  
            select s2.person  
            insert into outStream

这在简单的情况下可以正常工作,但是如果我提供以下输入内容:

"bob", "X"
"steve", "ABC"
"bob", "Y"

然后永远不会为Bob触发规则,因为中间有一个来自Steve的事件。

如果我尝试将其作为这样的模式:

define stream inStream(person string, value string); 
            from every s1=inStream[value == 'X']  
            -> s2=inStream[person == s1.person and value == 'Y'] within 5 sec  
            select s2.person  
            insert into outStream

然后在以下情况下失败:

"bob", "X"
"bob", "Z"
"bob", "Y"

因为在5秒钟之内,即使X之后,Y仍然在X之后。

我的问题是,有没有一种方法可以对条件进行顺序查询(例如,仅针对同一个人进行顺序查询),还是可以通过某种形式的检查来知道是否已在X和Y之间接收到另一个值的模式? / p>

1 个答案:

答案 0 :(得分:0)

最终对我有用的解决方案是对分区使用顺序方法:

define stream inStream(person string, value string);  
            partition with (person of inStream)  
            begin  
            from every s1=inStream[value == 'X'],  
            s2=inStream[value == 'Y'] within 5 sec  
            select s2.person  
            insert into outStream  
            end