SiddhiQL模式和窗口查询

时间:2017-06-05 14:28:13

标签: sql wso2 complex-event-processing siddhi

我正在尝试编写一个检测模式的简单siddhi查询 例如:" Ice" "霜" " X" " Y" "苹果" "水"

事件Ice&奶油都应该在一起,苹果水应该在一起,x y是窗口中的任意随机值。长度(6)

问题是以下查询不限制window.length(6)我该如何实现呢?

from every (( s1=windowedStream[s1.val=='ice']-> s2= windowedStream[s2.val=='cream'] )
            -> ( a1=windowedStream[a1.val=='apple'] -> a2 = windowedStream[a2.val =='water'] ))
select s1.meta_timestamp, s1.val
insert into filteredStream

1 个答案:

答案 0 :(得分:0)

根据现有符号,Siddhi允许您仅基于时间窗口限制模式。请参阅以下内容。

https://docs.wso2.com/display/CEP420/SiddhiQL+Guide+3.1#SiddhiQLGuide3.1-Pattern

作为基于长度窗口限制模式的一种解决方法,您可以向“windowedStream”引入名为index的第三个属性,其中index反映事件到达的顺序(即第一个事件的索引为1,索引为第二个事件是2,依此类推)。然后,以下查询将捕获在6个事件的长度窗口内发生的模式。

from every (( s1=tempStream[s1.val=='ice']-> s2= tempStream[s2.val=='cream'] )
        -> ( a1=tempStream[a1.val=='apple'] -> a2 = tempStream[a2.val =='water' and a2.index- s1.index <= 6]))
select s1.meta_timestamp, s1.val
insert into filteredStream;

希望这有帮助。