Я пытаюсь написать запрос (не уверен, если это возможно), что-то в форме «Если у человека есть значение X, его следующее значение не может быть значением Y в течение следующих 5 секунд»
Мои две попытки:
Последовательная:
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"
Тогда правило для Боба никогда не срабатывает, потому что в середине происходит событие от Стива.
Если я попробую это как шаблон:
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 все еще идет после X в течение 5 секунд, даже если между ними есть значение.
У меня вопрос: есть ли способ сделать последовательный запрос с условиями (например, последовательный только для одного и того же человека) или шаблон с какой-то проверкой, чтобы узнать, было ли получено другое значение между X и Y?