我们也有遇到维度关联的时候维表比流晚到的情况,不过我们的流一般都有唯一键,因此目前是用 session window 来自定义控制流的落后时间来关联。

具体思路:
对于流,按唯一键 Group By,对 process time 开延迟时间长度的 session window。
因为 Group By 了唯一键,每个 session 窗口里面一定只有一条数据,所以一定是到了设定的 size 就会触发的。

比如期望流数据到达后一分钟再去关联维表,SQL 如下:

-- 原始 SQL
SELECT
  s.id,
  s.another_field,
  r.dim_id_value
FROM
  source_table AS s
JOIN dim_table 
 for system_time AS of s.proctime AS r
ON r.id = s.id

-- 修改后的延迟1分钟进行关联的 SQL
SELECT
  s.id,
  s.another_field,
  r.dim_id_value
FROM (
  SELECT 
        id,
        MAX(another_field) AS another_field,
        SESSION_PROCTIME(proctime, INTERVAL '1' MINUTE)AS proctime
  FROM source_table
  GROUP BY SESSION(proctime, INTERVAL '1' MINUTE), id
) AS s
JOIN dim_table 
 for system_time AS of s.proctime AS r
ON r.id = s.id




--
Sent from: http://apache-flink.147419.n8.nabble.com/

回复