為 Snowflake 設定增量轉移

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

限制

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

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

設定增量轉移

如要設定增量轉移,請在設定 Snowflake 轉移作業時,選取轉移設定中的「增量」寫入偏好設定。

如果為資料移轉選取 增量,您可以透過 附加新增或更新寫入模式移轉資料,這兩種模式會定義增量資料移轉期間資料寫入 BigQuery 的方式。如要啟用「Upsert」寫入模式,必須在自訂結構定義檔案中定義主鍵。如果未定義主鍵,系統會預設使用「附加」寫入模式。以下各節說明可用的寫入模式。

附加寫入模式

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

Upsert 寫入模式

使用 upsert 寫入模式,即可透過主鍵更新、插入或刪除目的地資料表中的記錄。如果指定的主鍵存在於目的地 BigQuery 資料表中,Snowflake 連接器會正確插入、更新或刪除記錄,以反映變更。如果目的地資料表中沒有主鍵,連接器會插入來源插入或更新的新記錄,並略過刪除作業。

如要搭配增量資料移轉使用 upsert 寫入模式,您必須在自訂結構定義檔案中定義主鍵。選擇主鍵時,請注意下列事項:

  • 主鍵可以是資料表上的一或多個資料欄,連接器必須使用這些資料欄來識別要更新的記錄。

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

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

結構定義異動行為

增量轉移不支援結構定義演變。如果修改來源資料表結構,例如新增、移除或重新命名資料欄,或是變更資料欄資料類型,後續的遞增轉移作業就會失敗。如果來源結構定義發生變更,您必須執行完整資料移轉作業,重新同步處理資料。

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

您可以使用自訂架構檔案定義遞增轉移的主鍵,並自訂架構對應。自訂結構定義檔是 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 轉移作業」。