Скажите, что у меня есть поток событий, и я хочу, чтобы уметь подсчитывать, сколько из них есть во временном окне. Я хотел бы получать уведомление, когда событие входит в окно времени и изменяет счетчик и то же самое, когда событие выходит из окна времени.Как реализовать непрерывное временное окно в CEP?
На приведенной ниже иллюстрации показано, что я имею в виду. Я использую временное окно длиной 4, и я хочу 3 уведомления, один, когда первое событие входит в окно, второе, когда второе событие входит, а третье, когда первое событие выходит из окна времени.
Как сделать запрос, который делает это? Что делать, если я также хочу группировать по свойству события?
Вот что у меня есть, но это не дает мне уведомления, когда событие покидает окно: @config(async = 'true') define stream myStream (symbol string, timeStamp long) @info(name = 'query1') from myStream#window.externalTime(timeStamp,10 sec) select symbol, timeStamp, count(timeStamp) as eventCount group by symbol insert into outputStream
. Это для SIddhi CEP, но я думаю, что Эспер был бы подобен.
Это не работает. Я использую Siddhi 3.0.0-M1. Запрос: '@config (async = 'true') определяет поток myStream (символьная строка, timeStamp long) @info (name = 'query1') из myStream # window.externalTime (timeStamp, 10 sec) select symbol, timeStamp, count (timeStamp) как eventCount по символу вставить все события в outputStream' (обратите внимание на внешнее время). Но я все еще получаю события, когда событие входит в окно времени. – Johnny
Это потому, что вы используете внешнее окно времени, которое использует внешнюю метку времени. поэтому окно сравнивает время существующих событий со временем появления новых входящих событий и истекает их. если не обязательно использовать внешнее время, просто используйте простое окно времени, # window.time (10 секунд) –
также попробуйте использовать альфа-бета-версию или последний снимок сиддхи, так как он содержит исправления для многих ошибок в M1 , –