我很困惑,如果翻滚窗口将得到定期计算间隔和发射的元素进行处理。示例我有一个查询,它的工作间隔为10秒。
select id, key from eventTable GROUP BY TUMBLE(rowTime, INTERVAL '10' SECOND), id, key ;
现在假设:应用程序接收事件
e1@10:00:00
e2@10:00:05
e3@12:00:10
如您所见,e1和e2在5秒内到达,e3在@12:00:15到达。
你能帮我什么时候发射e1和e2进行处理吗?会是@10:00:11吗?或者e3什么时候会出现,然后query会计算窗口并发出?
如果是在e3之后,那么有没有办法确保每10秒执行一次查询?
感谢你在这方面的帮助。
2条答案
按热度按时间dw1jzc5e1#
如果您使用的是事件时间处理,那么当水印经过10:00:10时,将发出在10:00:10结束的窗口。如果水印是以通常的有界无序方式进行的,并且如果没有其他事件,那么水印将在处理e3之前不会前进。
如果您需要考虑空闲的水印策略,我相信您唯一的选择是使用datastreamapi创建流并应用处理空闲源的水印,然后将数据流转换为表。
注意什么
.withIdleness(...)
做的是将一个流标记为空闲,这样可以防止该流保留水印。这解决了一个空闲流在有其他活动流的情况下阻止整个作业的问题。如果您希望水印在完全没有任何事情发生的情况下继续进行,则需要做一些更激烈的操作。理想的解决方案是保留来自同一源的消息,这样您就知道空闲是真实的,而不是中断。如果做不到这一点,请参见ProcessingTimeTrailingBoundedAutoforErnessTimestampExtractor,以获取如何使用计时器检测空闲并基于时间的推移而不是新事件的到达来推进水印的示例(请注意,此示例尚未更新为使用新的
WatermarkStrategy
接口。)cetgtptt2#
您可以配置tableenv让table提前发出: