Flink Doris Connector 的left join on查询不到数据

Viewed 29

Doris 版本是 2.1.10,我在 MySQL 客户端里直接对 Doris 执行 left join on 语句,能正常查到数据;但是在 Flink SQL 里执行同样的关联逻辑,却查不到关联结果。
想请教一下,Flink 连接 Doris 是不是不支持 left join on 这种写法?
其中 paimon_union_view 是一张流表。
我的 SQL 如下(SERIAL_NUMBER肯定有数据,num是null):

select p.SERIAL_NUMBER,c.SERIAL_NUMBER as num
FROM paimon_union_view p
LEFT JOIN tf_f_user_doris c
on p.SERIAL_NUMBER = c.SERIAL_NUMBER
and c.nt in ('xx','dd') and c.code in ('a','b','c') and c.rt in ('yy','y1','y3','yN');

1 Answers

你这个场景需要用 Lookup join,你这个应该是一个普通的流式 regularjoin,而且 paimon_union_view 是一张流表。在 Flink 流模式下,regular join 的行为和 MySQL 里的批量 join 也不同。

Flink 会把两边的数据都维护在状态中,当左边(Paimon)来一条数据时,去右边状态里找匹配;当右边(Doris)来一条数据时,去左边状态里找匹配。
Doris 表作为 ScanTableSource,会被一次性读完(bounded source),读完后不再产生新数据。如果 Paimon 的数据在 Doris 数据加载到 Join 状态之前就到达了,就会找不到匹配,导致右侧全部为 NULL。

你参考下:lookup join