我正在尝试编写查询(不确定是否可能),形式为“如果某人具有值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>
答案 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