本頁說明在您設定 Datastream 至 BigQuery 的複製作業,但在錯誤的區域中設定目的地資料集的用途時,應採取的最佳做法。接著,您想將資料集移至其他區域 (或多區域),但不必將來源資料庫中的所有資料重新同步處理至 BigQuery。
事前準備
開始將資料遷移至其他區域前,請考量下列事項:
- 遷移作業需要時間,您必須在作業期間暫停串流。為了維持資料完整性,來源資料庫必須在暫停串流時保留變更記錄。如要預估要暫停串流多久,請將資料集中的
max_staleness
值與最久執行的合併作業結合:- 如要瞭解合併作業可能需要多久才能完成,請參閱「建議的資料表
max_staleness
值」。 - 如要找出資料集中的最大
max_staleness
,請參閱「判斷資料表的目前max_staleness
值」,並根據您的具體需求調整查詢。 - 如果預估的暫停時間過長,來源資料庫無法支援,建議您考慮暫時降低資料集中資料表的
max_staleness
值。
- 如要瞭解合併作業可能需要多久才能完成,請參閱「建議的資料表
- 請確認執行遷移作業的使用者在目的地區域中具有足夠的 BigQuery 資源 (查詢保留空間和背景保留空間)。如要進一步瞭解預留項目,請參閱「預留項目指派」。
- 請確認執行遷移作業的使用者具備足夠的權限,例如 身分與存取權管理 (IAM) 控制項或 VPC Service Controls。
遷移步驟
如要啟動資料集遷移作業,請使用 BigQuery 資料複製功能:
前往 Google Cloud 控制台的「BigQuery Studio」頁面。
在新區域中建立 BigQuery 資料集副本:
ALTER SCHEMA DATASET_NAME ADD REPLICA 'NEW_REGION' OPTIONS(location='NEW_REGION');
更改下列內容:
- DATASET_NAME:您要建立的資料集名稱。
- NEW_REGION:您要建立資料集的區域名稱。例如:
region-us
。
請監控遷移進度,並等待複本中的複製浮水印在幾分鐘內與主資料來源保持一致。您可以在 BigQuery INFORMATION_SCHEMA 上執行以下查詢,查看遷移進度:
SELECT catalog_name as project_id, schema_name as dataset_name, replication_time as dataset_replica_staleness FROM 'NEW_REGION'.INFORMATION_SCHEMA.SCHEMATA_REPLICAS WHERE catalog_name = PROJECT_ID AND schema_name = DATASET_NAME AND location = NEW_REGION;
更改下列內容:
- PROJECT_ID: Google Cloud 專案的 ID。
- DATASET_NAME:資料集名稱。
- DATASET_REPLICA_STALENESS:您建立的資料集副本中資料表的過時設定。
- NEW_REGION:您建立資料集的區域。
暫停現有的 Datastream 串流。詳情請參閱「暫停串流」。
等待資料流排空,並記下資料流進入
PAUSED
狀態的時間。確認最新的 CDC 變更已套用至 BigQuery 資料表,方法是查看資料表的
upsert_stream_apply_watermark
。執行下列查詢,並確認浮水印時間戳記比串流暫停時間晚 10 分鐘:SELECT table_name, upsert_stream_apply_watermark FROM DATASET_NAME.INFORMATION_SCHEMA.TABLES
如要只針對特定資料表執行查詢,請加入下列
WHERE
子句:WHERE table_name = 'TABLE_NAME'
更改下列內容:
- DATASET_NAME:資料集名稱。
- TABLE_NAME:選用。您要檢查
upsert_stream_apply_watermark
的資料表。
使用步驟 3 的查詢,驗證新區域複製浮水印比步驟 6 擷取的
upsert_stream_apply_watermark
晚。您可以選擇手動比較原始區域主要資料集中的幾個資料表,以及新區域的備份資料表,以確認所有資料都已正確複製。
在 BigQuery Studio 中執行下列指令,即可升級 BigQuery 資料集副本:
ALTER SCHEMA DATASET_NAME SET OPTIONS(primary_replica = 'NEW_REGION');
更改下列內容:
- DATASET_NAME:資料集名稱。
- NEW_REGION:您建立資料集的區域。
您也可以選擇在不再需要原始資料集 (現在是副本) 且不想產生額外費用的情況下,前往 BigQuery Studio 並刪除原始 BigQuery 資料集:
ALTER SCHEMA DATASET_NAME DROP REPLICA IF EXISTS ORIGINAL_REGION;
更改下列內容:
- DATASET_NAME:原始資料集的名稱。
- ORIGINAL_REGION:原始資料集的區域。
使用完全相同的設定建立新的串流,但使用新的 BigQuery 目的地位置。
開始新的串流。
如要避免重複事件,請從特定位置開始串流:
- MySQL 和 Oracle 來源:您可以檢查原始串流的記錄,找出串流成功讀取的最後位置,藉此判斷記錄位置。如要瞭解如何從特定位置開始串流,請參閱「管理串流」。
- 針對 PostgreSQL 來源:新串流會從複製運算單元中的第一組記錄檔序號 (LSN) 開始讀取變更內容。由於原始資料流可能已處理部分這些變更,請手動將複製運算單元的指標變更為 Datastream 讀取的最後一個 LSN。您可以在 Datastream 消費者記錄中找到這個 LSN。
視需要刪除原始串流。