本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
本文介紹多表連接算子的使用方法及注意事項。
用途
多表連接算子可以將多張數據表按照設置的連接條件進行連接。多表連接算子是兩表交集算子的高級版本,滿足多張數據表之間多種連接類型的需求。
適用場景
計算鏈路 | 計算引擎 | 是否支持 |
離線 | 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)引擎,對其它引擎無效。
輸出字段
配置當前節點輸出到下游節點的字段列表,默認為所有來源節點的全部字段,可按需刪減。如果不同來源節點中存在相同的字段名稱或者字段代碼,需要手動修改重復的字段名稱或者字段代碼。