更新时间: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;

相关文档