2016-11-15 13 views
0

Согласно Руководству пользователя, я полагаю, что окно внешнего времени (timestamp, time value) должно содержать события только в диапазоне: от метки времени до отметки времени + времени.wso2 cep externalTime issue

Например, в плане выполнения

from input 
select time:timestampInMilliseconds(time:dateAdd("2016-11-14 19:40:00", 5, 'minute',"yyyy-MM-dd HH:mm:ss"),'yyyy-MM-dd HH:mm:ss') as tm 
insert into tmp; 
from tmp#window.externalTime(tm,10 min) 
select ..... 

Я полагал, что временные рамки ограничены от 2016-11-14 19:45:00 до 2016-11-14 19:55:00.

Но на самом деле события после 19:55 также издаются в издательстве.

Это ошибка?

Если нет, как я могу сделать окно с точного времени?

ответ

0

Это не ошибка. Я думаю, вы неправильно поняли использование окна externalTime. Окно ExternalTime не фиксированное временное окно, это скользящее временное окно, похожее на окно времени. Однако разница между временным окном и окном externalTime заключается в том, что он использует атрибут timestamp (внешняя временная метка), который определен в определении потока, а использует фактическое время приема события (системное время, когда событие прибыло в окно), чтобы выберите окно для этого конкретного события. И это становится полезным в ситуациях, когда вы хотите воспроизвести поток событий или если время генерации фактического события отличается от времени приема (из-за больших сетевых задержек) и т. Д.

AFAIU, если вас интересует только события, которые прибыли между 2016-11-14 19:45:00 и 2016-11-14 19:55:00 (фиксированный временной диапазон), вы можете просто использовать для этого фильтр. см. образец ниже; В противном случае вам может потребоваться написать собственное расширение для этой цели (guide on writing custom extensions).

from input 
select time:timestampInMilliseconds() tm 
insert into tmpStream; 

-- 5 * 60 * 1000 Milliseconds = 5 min 
from tmpStream[tm - time:timestampInMilliseconds('2016-11-14 19:45:00.000') >= 5 * 60 * 1000] 
select * 
insert into withInTimeStream;