本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍多表连接算子的使用方法及注意事项。
用途
多表连接算子可以将多张数据表按照设置的连接条件进行连接。多表连接算子是两表交集算子的高级版本,满足多张数据表之间多种连接类型的需求。
适用场景
计算链路 | 计算引擎 | 是否支持 |
离线 | MaxCompute | 是 |
Hive | 是 | |
HiveStorage | 是 | |
RDS/MySQL | 是 | |
Spark | 是 |
使用说明
来源节点
多表连接算子必须指定2个或者2个以上的来源节点(又称为输入节点,每个来源节点可视为一张表),以求取这些来源节点数据合并的结果。
主表
多表连接算子中的主表是输入节点中的其中一个节点,主表的作用主要是提供连接的字段与其它节点进行连接操作。系统默认指定第一个输入节点为主表,用户可以自由将其它节点设置为主表。
如果已经配置了连接条件,重新设置主表将会清空已配置的连接条件。
连接类型
系统支持5种数据表连接类型,分别为左连接(left outer join)、右连接(right outer join)、外连接(full outer join)、内连接(inner join)、交叉连接(cross join)。多表连接算子支持多张数据表之间使用不同的连接类型,如节点A(主表)与节点B之间使用内连接,节点A(主表)与节点C之间使用左连接。
5种连接的定义及效果示意分别如下:
左连接:返回左表中所有的记录以及右表中连接字段相等的记录。
右连接:返回右表中所有的记录以及左表中连接字段相等的记录。
外连接:返回左表和右表所有的记录,连接字段相当的记录合成一条。
内连接:返回左表和右表中连接字段相等的记录。
交叉连接:如果不指定连接条件,返回左表和右表的笛卡尔积,返回的数据行数为左表的行数乘以右表的行数。如果指定连接条件,则返回左表和右表中连接字段相等的记录(与内连接的效果相同)。
1、除了交叉连接外,其它类型的连接必须配置连接条件。
2、RDS/MySQL不支持外连接。
3、MaxCompute(ODPS)不支持笛卡尔积(不带连接条件的交叉连接),如果需要使用笛卡尔积,需要在算子节点配置中开启MapJoin并指定小表。
对数据量比较大的数据表进行笛卡尔连接(不带连接条件的交叉连接),会因数据膨胀造成结果数据量巨大,影响节点的执行耗时,并占用较多的存储空间。
连接条件
连接条件指定了两张数据表之间使用哪些字段进行连接,当数据表中某条数据(假定为a)的所有连接字段的值与另一张数据表某条数据(假定为b)的所有连接字段的值相同,则这a、b两条数据成功连接。多表连接算子支持指定多张数据表之间使用不同的连接条件,如节点A(主表)与节点B之间指定连接条件"A.ID=B.ID",同时节点A(主表)与节点C之间指定其它的连接条件"A.NAME=C.NAME"。
开启MapJoin
当对一个大表和一个或多个小表执行join操作时,可以开启MapJoin显式指定小表以提升运算性能。
开启MapJoin功能仅支持MaxCompute(ODPS)引擎,对其它引擎无效。
输出字段
配置当前节点输出到下游节点的字段列表,默认为所有来源节点的全部字段,可按需删减。如果不同来源节点中存在相同的字段名称或者字段代码,需要手动修改重复的字段名称或者字段代码。