使用 flink interval join 的状态清理行为

state clean up behavior with flink interval join

我在

读书

https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/sql/queries/joins/#interval-joins,

它有以下例子:

SELECT *
FROM Orders o, Shipments s
WHERE o.id = s.order_id
AND o.order_time BETWEEN s.ship_time - INTERVAL '4' HOUR AND s.ship_time

我有以下两个问题:

  1. 如果o.order_times.ship_time是普通的时间列,不是事件时间属性,那么Flink中会保存所有的状态,就像普通的regular inner join一样吗?因此,也许大尺寸的状态将保留在 Flink

  2. 如果o.order_times.ship_time是事件时间属性,那flink会依赖watermark做状态清理吗?这样小尺寸的状态将保留在 Flink

是的,没错。 Flink SQL 之所以有时间属性的概念是为了让合适的流式查询可以自动清理它们的状态,间隔连接就是这样的查询的一个例子。版本化表上的时间 windows 和时间连接也以类似的方式工作。