【问题标题】:Siddhi query for sequential events with conditionsSiddhi 查询带有条件的顺序事件
【发布时间】:2018-09-17 23:55:22
【问题描述】:

我正在尝试编写一个查询(不确定是否可能),形式为“如果一个人的值为 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"

因为 Y 在 5 秒内仍然在 X 之后出现,即使两者之间有一个值。

我的问题是,有没有一种方法可以使用条件进行顺序查询(例如,仅对同一个人进行顺序查询)或通过某种检查来了解在 X 和 Y 之间是否收到了另一个值的模式?

【问题讨论】:

    标签: complex-event-processing siddhi


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2017-05-22
      • 1970-01-01
      • 2020-05-05
      相关资源
      最近更新 更多