Запрос сиддхи для последовательных событий с условиями - PullRequest
0 голосов
/ 13 сентября 2018

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

Решение, которое закончилось для меня, было использовать последовательный подход с разделом:

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
...