fbpx

Pentaho ETL 實作技巧:無共通欄位資料合併 Merge join & Multiway merge join

Linden 資料工程師 歐立威科技

對於使用 Pentaho (或者類似產品 Kettle / Hop) 這類 ETL 工具的開發人員來說,總有一些藏在角落、鮮為人知的方便功能。
筆者在此將講解有關 Pentaho 流程中,Merge join 與 Multiway merge join 的資料合併做法。

資料合併步驟

Merge join

萬一要合併的兩個資料來源,不屬於同一個資料庫伺服器,甚至不是資料庫來源呢?

這時 Merge join 就派上用場了。

Merge join 會合併兩個步驟傳遞的資料(包含資料庫來源、檔案來源等),可選擇 INNER JOIN 或多種 OUTER JOIN。

Multiway merge join設定視窗

Merge 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。

Multiway merge join設定視窗

Multiway merge join流程示意圖

Multiway merge join設定視窗

Multiway merge 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 步驟指定新欄位、完成合併

Add constants步驟添加相同內容欄位,配合Merge join步驟指定新欄位、完成合併

※ 如果來源超過兩項,可改用 Multiway merge join 步驟執行合併

Multiway merge join

「序列雙面膠」:配合 join 多對多合併

情境:兩股資料來源、資料量相同、沒有共通欄位可以對照

  • 資料來源A (左):欄位 group
  • 資料來源B (右):欄位 name, score

預期結果:合併資料、每列資料呈現所有資料來源欄位

利用 Add sequence 步驟添加序列,配合 Merge join 步驟指定新欄位、完成合併

※ 如果來源超過兩項,可改用 Multiway merge join 步驟執行合併

相關文章