繁体   English   中英

wso2 cep externalTime问题

[英]wso2 cep externalTime issue

根据用户指南,我认为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之后的事件。

是虫子吗?

如果没有,我该如何从准确的时间开始一个窗口?

这不是错误。 我认为您误解了externalTime窗口的用法。 ExternalTime窗口不是固定的时间窗口,而是类似于时间窗口的滑动时间窗口。 但是,时间窗口和externalTime窗口之间的区别在于,它使用在流定义中定义的timestamp属性(外部时间戳),而不是使用实际事件接收时间(事件到达窗口时的系统时间)来确定该特定事件的窗口。 在需要重播事件流或实际事件生成时间与接收时间不同(由于较高的网络延迟)等情况下,它很有用。

AFAIU,如果您仅对在2016-11-14 19:45:002016-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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM