更新时间:2026-06-11 GMT+08:00
FlinkSQL支持Multi Join
使用场景
FlinkSQL支持Multi Join,在多表Join场景下可以有效地减少中间state。
约束与限制
- Multi Join不支持Join-To-Live特性。
- 使用Multi Join前后的快照互不兼容。
- 使用Multi Join多表关联时,表关联键需要一致。
- 本章节仅适用于MRS 3.6.0-LTS.1及之后版本。
使用方法
配置Flink作业时,可通过在FlinkServer WebUI的Flink作业开发界面添加自定义参数“table.optimizer.multi-join.enabled”为“true”开启Multi Join功能,可参考集群连接模式创建Flink SQL作业。
SQL示例:
CREATE TABLE datagen1 (id int, f1 int, PRIMARY KEY (id) NOT ENFORCED)
WITH
(
'connector' = 'datagen',
'rows-per-second' = '1'
);
CREATE TABLE datagen2 (id int, f2 int, PRIMARY KEY (id) NOT ENFORCED)
WITH
(
'connector' = 'datagen',
'rows-per-second' = '1'
);
CREATE TABLE datagen3 (id int, f3 int, PRIMARY KEY (id) NOT ENFORCED)
WITH
(
'connector' = 'datagen',
'rows-per-second' = '1'
);
CREATE TABLE datagen5 (id int, f5 int, PRIMARY KEY (id) NOT ENFORCED)
WITH
(
'connector' = 'datagen',
'rows-per-second' = '1'
);
CREATE TABLE datagen6 (id int, f6 int, PRIMARY KEY (id) NOT ENFORCED)
WITH
(
'connector' = 'datagen',
'rows-per-second' = '1'
);
CREATE TABLE print (id int, f1 int, f2 int, f3 int, f5 int, f6 int)
WITH
('connector' = 'print');
insert into
print
select
datagen1.id,
datagen1.f1,
datagen2.f2,
datagen3.f3,
datagen5.f5,
datagen6.f6
from
datagen1
left join datagen2 on datagen1.id = datagen2.id
and datagen2.id > 2
join datagen3 on datagen1.id = datagen3.id
and datagen3.id > 3
right join datagen5 on datagen1.id = datagen5.id
and datagen5.id > 5
full outer join datagen6 on datagen1.id = datagen6.id
and datagen6.id > 6
and datagen1.id > 1; 父主题: Flink企业级能力增强