為 Snowflake 設定增量轉移
本指南說明如何設定從 Snowflake 到 BigQuery 的增量資料轉移作業。增量轉移功能可讓您只轉移上次執行轉移作業後變更的資料,藉此縮短轉移時間並降低成本。
增量移轉限制
增量 Snowflake 轉移作業有下列限制:
- 如要使用 upsert 寫入模式,必須提供主鍵欄。詳情請參閱「定義增量轉移的主鍵」。
- 主鍵在來源資料表中不得重複。如果存在重複項目,BigQuery 中的合併作業結果可能會不一致,且與來源資料不符。
- 系統不支援使用增量轉移自動處理結構定義變更。如果來源資料表的結構定義有所變更,您必須手動更新 BigQuery 資料表結構定義。
- 如果來源資料的變更集中在少數幾個分割區,增量轉移最能發揮作用。如果更新分散在來源資料表中,增量轉移的效能可能會大幅降低,因為這需要掃描許多分區。如果資料移轉期間變更的資料列數量眾多,建議改用完整移轉。
- Snowflake 中的部分作業 (例如
CREATE OR REPLACE TABLE或CLONE) 會覆寫原始資料表物件及其相關聯的變更追蹤記錄。這會導致現有資料移轉作業過時,因此需要重新完整同步處理,才能繼續進行增量移轉。 - 增量轉移作業必須經常執行,才能在Snowflake 的資料保留期限內追蹤變更。如果上次成功轉移資料的時間不在這個時間範圍內,下次轉移作業就會是完整轉移。
資料擷取行為
設定 Snowflake 移轉作業時,您可以在移轉設定中選取「完整」或「增量」寫入偏好設定,指定資料載入 BigQuery 的方式。預先發布版支援增量轉移。
您可以設定完整資料轉移,在每次資料轉移時,轉移 Snowflake 資料集中的所有資料。或者,您也可以設定增量資料移轉作業 (搶先版),只移轉上次資料移轉作業後變更的資料,而不是在每次資料移轉作業中載入整個資料集。如果為資料移轉作業選取「增量」Incremental,則必須指定「附加」Append或「插入或更新」Upsert寫入模式,定義在增量資料移轉期間,資料如何寫入 BigQuery。以下各節說明可用的寫入模式。
附加寫入模式
附加寫入模式只會將新資料列插入目的地資料表。這個選項會嚴格附加移轉的資料,不會檢查現有記錄,因此這個模式可能會導致目的地資料表中的資料重複。
選取附加模式時,必須選取浮水印欄。Snowflake 連接器必須有浮水印資料欄,才能追蹤來源資料表中的變更。
如果是 Snowflake 轉移作業,建議選取只在記錄建立時更新的資料欄,後續更新不會變更。例如「CREATED_AT」欄。
Upsert 寫入模式
新增或更新寫入模式會檢查主鍵,以更新資料列或在目的地資料表中插入新資料列。您可以指定主鍵,讓 Snowflake 連接器判斷需要哪些變更,才能讓目的地資料表與來源資料表保持同步。如果在資料移轉期間,指定的資料表主鍵出現在 BigQuery 目標資料表中,Snowflake 連接器就會使用來源資料表中的新資料更新該資料列。如果資料轉移期間沒有主鍵,Snowflake 連接器就會插入新列。
選取「新增或更新」模式時,必須選取浮水印欄和主鍵:
- Snowflake 連接器必須使用浮水印資料欄,才能追蹤來源資料表的變更。
- 選取每次修改資料列時都會更新的水印資料欄。建議使用與
UPDATED_AT或LAST_MODIFIED欄類似的資料欄。
- 選取每次修改資料列時都會更新的水印資料欄。建議使用與
主鍵可以是資料表上的一或多個資料欄,Snowflake 連接器會根據這些資料欄判斷是否需要插入或更新資料列。
選取包含非空值的資料欄,這些值在資料表的所有資料列中都是不重複的。建議您使用包含系統產生的 ID、不重複的參照代碼 (例如自動遞增的 ID) 或不可變動的時間序列 ID 的資料欄。
為避免資料遺失或損毀,您選取的主鍵資料欄必須具有不重複的值。如果您對所選主鍵欄的唯一性有疑慮,建議改用附加寫入模式。
如要搭配使用 upsert 寫入模式和增量資料移轉,請務必在自訂結構定義檔案中定義主鍵。
增量擷取行為
在資料來源中變更資料表結構定義時,這些資料表的增量資料移轉作業會以以下方式反映在 BigQuery 中:
| 資料來源異動 | 增量擷取行為 |
|---|---|
| 新增資料欄 | 目的地 BigQuery 資料表會新增資料欄。 這個資料欄的所有先前記錄都會有空值。 |
| 刪除資料欄 | 刪除的資料欄仍會保留在目的地 BigQuery 資料表中。系統會在新項目中填入空值。 |
| 變更資料欄中的資料類型 | 連接器僅支援
ALTER COLUMN DDL 陳述式支援的資料類型轉換。如果轉換成其他資料類型,資料轉移作業就會失敗。
如果遇到任何問題,建議建立新的轉移設定。 |
| 重新命名資料欄 | 原始資料欄會保留在目的地 BigQuery 資料表中,而目的地資料表會新增一個名稱更新的資料欄。 |
用於增量轉移的自訂結構定義檔案
您可以使用自訂架構檔案,為增量轉移定義主鍵,並自訂架構對應。自訂結構定義檔是 JSON 檔案,用於說明來源和目標結構定義。
如要在「Upsert」模式下進行增量轉移,您必須將一或多個資料欄設為主鍵。如要這麼做,請在自訂結構定義檔案中,使用 PRIMARY_KEY 用途類型為資料欄加上註解。
以下範例顯示自訂結構定義檔案,該檔案將 O_ORDERKEY 和 O_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 轉移作業」。