Pentaho ETL 實作技巧:無共通欄位資料合併 Merge join & Multiway merge join
內容目錄
對於使用 Pentaho (或者類似產品 Kettle / Hop) 這類 ETL 工具的開發人員來說,總有一些藏在角落、鮮為人知的方便功能。
筆者在此將講解有關 Pentaho 流程中,Merge join 與 Multiway merge join 的資料合併做法。
資料合併步驟
Merge join
萬一要合併的兩個資料來源,不屬於同一個資料庫伺服器,甚至不是資料庫來源呢?
這時 Merge join 就派上用場了。
Merge join 會合併兩個步驟傳遞的資料(包含資料庫來源、檔案來源等),可選擇 INNER JOIN 或多種 OUTER JOIN。
Merge join設定視窗
- 設定需合併資料的步驟:
First step
Second step - 選擇合併方式:
INNER, LEFT OUTER,
RIGHT OUTER, FULL OUTER - 設定合併關聯鍵:
Keys for 1st step:
Keys for 2nd step:
(可用 Get key fields 快速加入)
Multiway merge join
糟糕,Merge join 只能合併兩個資料來源,但是來源有三個,該怎麼辦?
別急,這裡還有 Multiway merge join 可以幫忙。
步驟 Multiway merge join 會合併兩個以上步驟傳遞的資料(包含資料庫來源、檔案來源等),可選擇 INNER JOIN 或
FULL OUTER JOIN。
- 設定輸入步驟:Input Step(n)
※ 欄位數量隨連結步驟而增減 - 設定合併關聯鍵:Join Keys
※ 必須點選 Select Keys 按鈕、開啟小視窗填寫關聯鍵名稱 - 選擇合併方式:Join Type: (INNER 或 FULL OUTER)
「常值膠帶」與「序列膠帶」
看過標準的 join 步驟,可能有人會問:每次都要設定共通欄位,有沒有更便利的方法?
方法有,而且步驟連起來就可以。
情境:兩股資料來源、資料欄位組成相同
- 資料來源A (左側ABC字樣)
- 資料來源B (右側JKL字樣)
- 兩個來源都由欄位 name, score 組成
預期結果:
合併資料、每列資料呈現所有資料來源欄位
「常值膠帶」:利用 Add constants 步驟追加固定常值,合併多股來源資料
※ 注意:資料合併順序受資料來源步驟建立順序影響,可後續追加 Sort rows 步驟重新排序
「序列膠帶」:利用 Add sequence 步驟追加固定序列,合併多股來源資料
※ 注意:資料合併順序受資料來源步驟建立順序影響,可後續追加 Sort rows 步驟重新排序
無共通欄位情境處理
看過前面的介紹,資料合併動作都在「有共通欄位」的前提下完成。如果有兩股以上、沒有共通欄位的資料載入 Pentaho,如何實現欄位合併?
那就自己製造共通欄位!
「常值雙面膠」:配合 join 一 對多合併
情境:兩股資料來源、資料量不同、沒有共通欄位可以對照
- 資料來源A:欄位 group
- 資料來源B:欄位 name, score
預期結果:合併資料、每列資料呈現所有資料來源欄位
- 合併資料:欄位 group, name, score
利用 Add constants 步驟添加相同內容欄位,配合 Merge join 步驟指定新欄位、完成合併
※ 如果來源超過兩項,可改用 Multiway merge join 步驟執行合併
「序列雙面膠」:配合 join 多對多合併
情境:兩股資料來源、資料量相同、沒有共通欄位可以對照
- 資料來源A (左):欄位 group
- 資料來源B (右):欄位 name, score
預期結果:合併資料、每列資料呈現所有資料來源欄位
利用 Add sequence 步驟添加序列,配合 Merge join 步驟指定新欄位、完成合併
※ 如果來源超過兩項,可改用 Multiway merge join 步驟執行合併