我们也有遇到维度关联的时候维表比流晚到的情况,不过我们的流一般都有唯一键,因此目前是用 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/