2016-08-23 15 views
0

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

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 в каждом новом значении, чтобы получить накопительное количество запросов с каждыми новыми запросами, какие изменения будет необходим? Есть ли какая-либо функция в сиддхи, чтобы получить предыдущее значение события из потока, который уже опубликован?

ответ

0

Вы не должны использовать 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;