wso2 cep externalTime проблема

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

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

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 тоже обстреливаются в издателе.

Это ошибка?

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


person Pavel    schedule 15.11.2016    source источник


Ответы (1)


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

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

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;
person Grainier    schedule 16.11.2016