WSO2CEP: получение значения предыдущего события из потока в запросе сиддхи

Я использовал следующий siddhi query, чтобы получить количество событий в минуту; ts как отметка времени (строка) и ftp_requests как count (int).

from FTPInStream[command == 'USER']
select time:timestampInMilliseconds(time:dateAdd(str:replaceAll(ts,'T',' '), 5, 'hour',"yyyy-MM-dd HH:mm:ss"),'yyyy-MM-dd HH:mm') as milliseconds , uid, id_orig_h, id_orig_p, id_resp_h, id_resp_p
insert into intermediateStream;

from intermediateStream#window.externalTimeBatch( milliseconds ,1 min, milliseconds, 1 min)
select time:dateFormat(milliseconds, 'yyyy-MM-dd HH:mm' ) as ts , cast(count(milliseconds), 'int') as ftp_requests
group by milliseconds
insert into FTPOutStream;

Если я хочу добавить предыдущее значение ftp_requests в каждое новое значение, чтобы получить общее количество запросов с каждым новым запросом, какое изменение потребуется? Есть ли в сиддхи какая-либо функция для получения значения предыдущего события из уже опубликованного потока?


person aneela    schedule 23.08.2016    source источник


Ответы (1)


Вы не должны использовать group by milliseconds, а count() не должны требовать никаких параметров, а также его не нужно приводить к int. Попробуйте следующий запрос.

from FTPInStream[command == 'USER']
select time:timestampInMilliseconds(time:dateAdd(str:replaceAll(ts,'T',' '), 5, 'hour',"yyyy-MM-dd HH:mm:ss"),'yyyy-MM-dd HH:mm') as milliseconds , uid, id_orig_h, id_orig_p, id_resp_h, id_resp_p
insert into intermediateStream;

from intermediateStream#window.externalTimeBatch( milliseconds ,1 min, milliseconds, 1 min)
select time:dateFormat(milliseconds, 'yyyy-MM-dd HH:mm:ss' ) as ts , count() as ftp_requests
insert into FTPOutStream;
person Grainier    schedule 24.08.2016