根据用户指南,我认为externalTime窗口(时间戳,时间值)应该仅将事件保持在范围内:从时间戳到时间戳+时间值。
例如,在执行计划
中ffmpeg
我认为时间范围限制在2016-11-14 19:45:00至2016-11-14 19:55:00。
但事实上,19:55之后的事件也会在出版商中被解雇。
这是一个错误吗?
如果不是,我怎样才能从确切的时间开出一个窗口?
答案 0 :(得分:0)
这不是一个错误。我认为你误解了externalTime窗口的用法。 ExternalTime窗口不固定时间窗口,它是一个类似于时间窗口的滑动时间窗口。但是,时间窗口和externalTime窗口之间的区别在于它使用在流定义中定义的时间戳属性(外部时间戳),而不是使用实际事件接收时间(事件到达窗口时的系统时间)到决定该特定事件的窗口。并且它在您想要重放事件流的情况下变得有用,或者如果实际事件生成时间与其接收时间(由于高网络延迟)等不同,则会变得非常有用。
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;