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