Beam YAML 連接
Beam YAML 可以根據指定的欄位連接兩個或多個輸入。例如,以下管線會在「第一個輸入」pcollection 中的 col1 等於「第二個輸入」pcollection 中的 col2 時,連接這兩個 pcollection。
- type: Join
input:
input1: First Input
input2: Second Input
config:
equalities:
- input1: col1
input2: col2
當在所有輸入中使用相同名稱的一個欄位連接多個輸入時,可以使用以下簡寫語法
- type: Join
input:
input1: First Input
input2: Second Input
input3: Third Input
config:
equalities: col1
連接類型
當使用 Join 轉換時,可以指定要在輸入上執行的連接類型。如果未指定連接類型,則所有輸入都會使用內部連接進行連接。支援的連接類型有:
連接類型 | YAML 關鍵字 |
---|---|
內部連接 | inner |
完整外部連接 | left |
右外部連接 | right |
以下範例使用指定的等式對兩個輸入執行內部連接
- type: Join
input:
input1: First Input
input2: Second Input
config:
type: inner
equalities:
- input1: col1
input2: col1
以下範例使用指定的等式對兩個輸入執行左外部連接。在這種情況下,由於 input1 是左側輸入,因此會保留 input1 中的所有列。連接的順序遵循等式中指定的順序。
- type: Join
input:
input1: First Input
input2: Second Input
config:
type: left
equalities:
- input1: col1
input2: col1
以下範例使用指定的等式對三個輸入執行完整外部連接
- type: Join
input:
input1: First Input
input2: Second Input
input3: Third Input
config:
type: outer
equalities:
- input1: col1
input2: col1
- input2: col2
input3: col2
如果想要組合連接類型,可以指定要外部連接的輸入。以下範例使用右外部連接將 input1 與 input2 連接,因為 input2 在右側,並使用左外部連接將 input2 與 input 3 連接,因為 input2 在左側。
- type: Join
input:
input1: First Input
input2: Second Input
input3: Third Input
config:
type:
outer:
- input2
equalities:
- input1: col1
input2: col1
- input2: col2
input3: col2
欄位
預設情況下,連接轉換包含所有輸入表格中的所有欄位。如果欄位名稱衝突,最好明確重新命名它們。否則,系統會新增數字後綴來取消重複名稱
若要選擇要輸出的欄位,或自訂輸出欄位名稱,請使用「fields」設定。
若要指定要從輸入輸出的欄位,請使用輸入參考作為設定鍵,並使用所需欄位的清單作為設定值。以下範例會輸出 input1 中的 col1、input2 中的 col2 和 col3,以及 input 3 中的所有欄位。如果存在名稱衝突,它會附加一個數字後綴以避免重複命名。
- type: Join
input:
input1: First Input
input2: Second Input
input3: Third Input
config:
equalities: col1
fields:
input1: [col1]
input2: [col2, col3]
若要重新命名輸出中的欄位,請為輸入建立一個對應,將新欄位名稱作為鍵,原始欄位名稱作為值。以下範例會將 input3 中的 col1 對應到欄位名稱「renamed_col1」
- type: Join
input:
input1: First Input
input2: Second Input
input3: Third Input
config:
equalities: col1
fields:
input1: [col1]
input2: [col2, col3]
input3:
renamed_col1: col1