Сиддхи-запрос для последовательных событий с условиями

Я пытаюсь написать запрос (не уверен, возможно ли это), что-то в форме «Если человек имеет значение 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?

1
0
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Другие вопросы по теме