我正在尝试编写Siddhi查询,以检测某个事件是否没有在限定时间内发生在另一个事件之前。在siddhi应用程序的整个生命周期中,我必须检测“ X”是否从未在“ Y”之前发生的查询是:
from stream[value == 'Y']
and not stream[value == 'X']
我认为添加时间限制会起作用:
from stream[value == 'Y']
and not stream[value == 'X'] for 5 min
但是,“ for”语句永远不会产生任何效果。无论“ X”是4分钟前还是6分钟前,仍会触发此查询。我了解通过检查在限定时间内“ Y”是否在“ X”之后可以达到类似的效果,但是出于我的目的,我需要了解另一种方法。
锡迪这可能吗?如果可以,请提供一个示例查询来实现此目的?
答案 0 :(得分:0)
根据您的评论,我将在下面回答。 Siddhi中的Sequence构造将确保没有人可以在随机点进入状态流。下面以序列查询示例为例。
from every e1=InputStream[state='X'], e2=InputStream[state'Y']
select e1.state as initialState, e2.state as finalState
insert into NextStream;
因此在这里,我们将强制X跟随连续的Y。如果Y出现在X序列构造将处理它并丢弃Y之前,那么保证进入NextStream的所有内容都保证满足x-> Y状态转换。
更轻松的序列构造是pattern。放宽连续到达要求时与顺序相同。希望这会有所帮助!