Сиддхи: игнорировать повторяющиеся события, пока шаблон активен - PullRequest
0 голосов
/ 05 июня 2019

У меня есть шаблон не встречающихся событий , чтобы определить, возникает ли определенное условие, а затем предупредить меня, если это условие не изменится в течение определенного времени. Приведенный ниже запрос может быть описан как «Если для пользователя появляется значение 1, предупредите меня, если в течение 5 секунд для этого пользователя нет нового значения»:

define stream inStream(name string, value int);
partition with (name of inStream) 
begin 
    from every in=inStream[ value == 1 ]
    -> not inStream[ not(value == 1) ] for 5 sec
    select in.name, in.value
    insert into outStream;
end;

Этот запрос работает точно так же, как и ожидалось: если я не получу значение, отличное от 1, в течение 5 секунд, запрос будет запущен. Проблема возникает при наличии дублирующихся событий со значением 1.

Если я отправляю событие {name: "bob", value: 1} каждую секунду в течение 10 секунд, мне бы хотелось, чтобы запрос запускался дважды, один раз через 5 секунд и один раз через 10 секунд. Однако сейчас я вижу, что запрос запускается каждую секунду, начиная с 5 секунд. По сути, запрос (работающий как надо) запускает 5-секундный таймер для каждого события со значением 1, которое он видит. Однако я бы не хотел запускать этот таймер (или, по крайней мере, не выводить его), если таймер уже запущен.

Я попытался решить эту проблему с помощью следующего запроса (просто добавив строку «output»):

define stream inStream(name string, value int);
partition with (name of inStream) 
begin 
    from every in=inStream[ value == 1 ]
    -> not inStream[ not(value == 1) ] for 5 sec
    select in.name, in.value
    output first every 5 sec
    insert into outStream;
end;

Я также пытался output last и output all.

Вышеприведенные запросы работали не так, как ожидалось: в случае all и last события вообще не выводились, в случае first выводилось только одно событие, а не последующие после первые 5 секунд пройдены.

Есть ли способ добиться того, чего я хотел бы? У меня есть предчувствие, что использование временных окон или output - это способ решить эту проблему, но до сих пор не удалось заставить его работать.

1 Ответ

1 голос
/ 06 июня 2019

Второй запрос в исходном вопросе работает в соответствии с ожиданиями.Ранее я был на Сиддхи 4.1.4.После обновления до Siddhi 5.0.0 запрос работает так, как я хотел.

...