為 Snowflake 設定增量轉移

本指南說明如何設定從 Snowflake 到 BigQuery 的增量資料轉移作業。增量轉移功能可讓您只轉移上次執行轉移作業後變更的資料,藉此縮短轉移時間並降低成本。

增量移轉限制

增量 Snowflake 轉移作業有下列限制:

  • 如要使用 upsert 寫入模式,必須提供主鍵欄。詳情請參閱「定義增量轉移的主鍵」。
  • 主鍵在來源資料表中不得重複。如果存在重複項目,BigQuery 中的合併作業結果可能會不一致,且與來源資料不符。
  • 系統不支援使用增量轉移自動處理結構定義變更。如果來源資料表的結構定義有所變更,您必須手動更新 BigQuery 資料表結構定義。
  • 如果來源資料的變更集中在少數幾個分割區,增量轉移最能發揮作用。如果更新分散在來源資料表中,增量轉移的效能可能會大幅降低,因為這需要掃描許多分區。如果資料移轉期間變更的資料列數量眾多,建議改用完整移轉。
  • Snowflake 中的部分作業 (例如 CREATE OR REPLACE TABLECLONE) 會覆寫原始資料表物件及其相關聯的變更追蹤記錄。這會導致現有資料移轉作業過時,因此需要重新完整同步處理,才能繼續進行增量移轉。
  • 增量轉移作業必須經常執行,才能在Snowflake 的資料保留期限內追蹤變更。如果上次成功轉移資料的時間不在這個時間範圍內,下次轉移作業就會是完整轉移。

資料擷取行為

設定 Snowflake 移轉作業時,您可以在移轉設定中選取「完整」或「增量」寫入偏好設定,指定資料載入 BigQuery 的方式。預先發布版支援增量轉移。

您可以設定完整資料轉移,在每次資料轉移時,轉移 Snowflake 資料集中的所有資料。

或者,您也可以設定增量資料移轉作業 (搶先版),只移轉上次資料移轉作業後變更的資料,而不是在每次資料移轉作業中載入整個資料集。如果為資料移轉作業選取「增量」Incremental,則必須指定「附加」Append或「插入或更新」Upsert寫入模式,定義在增量資料移轉期間,資料如何寫入 BigQuery。以下各節說明可用的寫入模式。

附加寫入模式

附加寫入模式只會將新資料列插入目的地資料表。這個選項會嚴格附加移轉的資料,不會檢查現有記錄,因此這個模式可能會導致目的地資料表中的資料重複。

選取附加模式時,必須選取浮水印欄。Snowflake 連接器必須有浮水印資料欄,才能追蹤來源資料表中的變更。

如果是 Snowflake 轉移作業,建議選取只在記錄建立時更新的資料欄,後續更新不會變更。例如「CREATED_AT」欄。

Upsert 寫入模式

新增或更新寫入模式會檢查主鍵,以更新資料列或在目的地資料表中插入新資料列。您可以指定主鍵,讓 Snowflake 連接器判斷需要哪些變更,才能讓目的地資料表與來源資料表保持同步。如果在資料移轉期間,指定的資料表主鍵出現在 BigQuery 目標資料表中,Snowflake 連接器就會使用來源資料表中的新資料更新該資料列。如果資料轉移期間沒有主鍵,Snowflake 連接器就會插入新列。

選取「新增或更新」模式時,必須選取浮水印欄和主鍵:

  • Snowflake 連接器必須使用浮水印資料欄,才能追蹤來源資料表的變更。
    • 選取每次修改資料列時都會更新的水印資料欄。建議使用與 UPDATED_ATLAST_MODIFIED 欄類似的資料欄。
  • 主鍵可以是資料表上的一或多個資料欄,Snowflake 連接器會根據這些資料欄判斷是否需要插入或更新資料列。

    選取包含非空值的資料欄,這些值在資料表的所有資料列中都是不重複的。建議您使用包含系統產生的 ID、不重複的參照代碼 (例如自動遞增的 ID) 或不可變動的時間序列 ID 的資料欄。

    為避免資料遺失或損毀,您選取的主鍵資料欄必須具有不重複的值。如果您對所選主鍵欄的唯一性有疑慮,建議改用附加寫入模式。

如要搭配使用 upsert 寫入模式和增量資料移轉,請務必在自訂結構定義檔案中定義主鍵

增量擷取行為

在資料來源中變更資料表結構定義時,這些資料表的增量資料移轉作業會以以下方式反映在 BigQuery 中:

資料來源異動 增量擷取行為
新增資料欄 目的地 BigQuery 資料表會新增資料欄。 這個資料欄的所有先前記錄都會有空值。
刪除資料欄 刪除的資料欄仍會保留在目的地 BigQuery 資料表中。系統會在新項目中填入空值。
變更資料欄中的資料類型 連接器僅支援 ALTER COLUMN DDL 陳述式支援的資料類型轉換。如果轉換成其他資料類型,資料轉移作業就會失敗。

如果遇到任何問題,建議建立新的轉移設定。

重新命名資料欄 原始資料欄會保留在目的地 BigQuery 資料表中,而目的地資料表會新增一個名稱更新的資料欄。

用於增量轉移的自訂結構定義檔案

您可以使用自訂架構檔案,為增量轉移定義主鍵,並自訂架構對應。自訂結構定義檔是 JSON 檔案,用於說明來源和目標結構定義。

如要在「Upsert」模式下進行增量轉移,您必須將一或多個資料欄設為主鍵。如要這麼做,請在自訂結構定義檔案中,使用 PRIMARY_KEY 用途類型為資料欄加上註解。

以下範例顯示自訂結構定義檔案,該檔案將 O_ORDERKEYO_ORDERDATE 定義為 orders 資料表的主鍵:


{
  "databases": [
    {
      "name": "my_db",
      "originalName": "my_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "usageType": [
                "PRIMARY_KEY"
              ]
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "usageType": [
                "PRIMARY_KEY"
              ]
            }
          ]
        }
      ]
    }
  ]
}

啟用變更追蹤功能

如要設定 Snowflake 增量轉移,請先對每個來源資料表執行下列指令,啟用變更追蹤功能:

ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;

如果資料表未啟用變更追蹤功能,Snowflake 連接器預設會完整轉移該資料表的資料。

後續步驟

設定完增量 Snowflake 轉移作業的所有必要步驟後,即可為 Snowflake 轉移設定啟用增量轉移作業。詳情請參閱「設定 Snowflake 轉移作業」。