我用的是flink 1.6时间窗。假设我有以下数据点:时间戳,值12:55:00, 1013:05:00, 1213:30:00, 1413:59:00, 1314:02:00, 17现在,我的时间窗口是13:00(含)~14:00(不含),如何得到最后一个值,即12:55:00,10,作为当前窗口计算的初始值?谢谢。
eqqqjvef1#
一般来说,有两种方法可以实现这一点:某种自定义窗口改用processfunction考虑到windowapi的设计方式,在使用预聚合(即reduce或aggregate)时,我看不到任何方法可以实现这一点,但我认为可以使用processwindowfunction和自定义逐出器,或者利用processwindowfunction.context中的globalstate在一个窗口和下一个窗口之间保持状态。您可能遇到的一个问题是,例如,如果在13:00~14:00这一小时内没有发生任何事件,则不会创建或计算任何窗口。如果这是一个问题,那么需要进一步定制。在大多数涉及非标准窗口的情况下,使用processfunction更直接、更高效。这样,您就可以直接控制要保持的状态,而窗口触发逻辑通常不太难重新创建。
1条答案
按热度按时间eqqqjvef1#
一般来说,有两种方法可以实现这一点:
某种自定义窗口
改用processfunction
考虑到windowapi的设计方式,在使用预聚合(即reduce或aggregate)时,我看不到任何方法可以实现这一点,但我认为可以使用processwindowfunction和自定义逐出器,或者利用processwindowfunction.context中的globalstate在一个窗口和下一个窗口之间保持状态。
您可能遇到的一个问题是,例如,如果在13:00~14:00这一小时内没有发生任何事件,则不会创建或计算任何窗口。如果这是一个问题,那么需要进一步定制。
在大多数涉及非标准窗口的情况下,使用processfunction更直接、更高效。这样,您就可以直接控制要保持的状态,而窗口触发逻辑通常不太难重新创建。