1. 概述
進行資料處理時,經常需要將資料表進行連結,本文介紹在 FineDataLink 中的多種連結方式。
2. 左連結
LEFT JOIN(左連結)和 LEFT OUTER JOIN(左外連結) :傳回包括左表中的所有記錄和右表中連結欄位相等的記錄。
根據條件以左表為基準進行匹 配,如果匹配則正常匯出,沒有則以 null 代替,而且右邊表有重複值的情況下會匯出多條。
在 FineDataLink 中可以使用「資料聯動」實現。
有兩張表如下:

使用資料聯動左連結,如下圖所示:

得到以下結果:

上述算子設定相當於 SparkSQL 中的文法:
select * from DB表輸入-複本
left join DB表輸入1-複本
on DB表輸入-複本.`姓名` = DB表輸入1-複本.`姓名`
或者
select * from DB表輸入-複本
left outer join DB表輸入1-複本
on DB表輸入-複本.`姓名` = DB表輸入1-複本.`姓名`
注:LEFT JOIN 和 LEFT OUTER JOIN 的匯出結果是一樣的。
LEFT SEMI JOIN(左半連結):
只顯示左邊的表中的列,如果條件在左右邊表中匹配,則匯出,否則 過濾掉,而且右邊表有重複值的情況下也只匯出一條。
例如上述兩張資料表,如果使用左半連結則

注:語句不能直接複製,資料表需點選輸入源生成。
則只會顯示左右邊表都匹配的結果,且右側重複值被刪除,結果如下:

3. 右連結
與左連結一致,使用「資料聯動」即可實現。
4. 全連結
與左連結一致,使用「資料聯動」即可實現。
5. 內連結
與左連結一致,使用「資料聯動」即可實現。
5. UNION 和 UNION ALL 聯合
UNION:會在上下聯合時去除完全重複的資料。如果不為了去除重複行,建議使用 UNION ALL,並且效率會更高。
範例: select* from ( select 2 as id_no,99 as score union select 2 ,95 ) Student_Score
UNION ALL :對查詢的資料集取並集,不會去除重複行。
例如使用如下資料表進行上下聯合:

1)使用兩個DB表輸入算子,使用 SQL 與篩選出表a1,a2的全部資料,然後 Spark SQL 算子的 SQL 語句為:
select * from a1
union all
select * from a2
效果如下圖所示:
注:語句不能直接複製,資料表需點選輸入源生成。

結果如下圖所示:

如果使用 UNION 則表一種的重複資料會被刪除,僅保留一條,結果如下圖所示:

