首页 > 解决方案 > 使用 flink 间隔连接的状态清理行为

问题描述

我正在阅读

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 中,就像正常的常规内部连接一样?所以,也许大尺寸的状态会保留在 Flink

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

标签: apache-flink

解决方案


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


推荐阅读