本頁說明最佳做法,適用於您已將 Datastream 複製作業設定為 BigQuery,但目的地資料集設定在錯誤區域的用途。然後,您想將資料集移至其他地區 (或多地區),不必重新將所有資料從來源資料庫同步到 BigQuery。
事前準備
開始將資料遷移至其他地區前,請考量下列事項:
- 遷移作業需要時間,且您必須在作業期間暫時停止串流。為維護資料完整性,資料流暫停時,來源資料庫必須保留變更記錄。如要估算暫停串流的時間長度,請合併資料集中的
max_staleness值和執行時間最長的合併作業:- 如要瞭解合併作業可能需要多久才能完成,請參閱「建議的資料表
max_staleness值」。 - 如要找出資料集中的最大
max_staleness,請參閱「判斷資料表的目前max_staleness值」,並根據特定需求調整查詢。 - 如果預估暫停時間過長,來源資料庫無法支援,建議您暫時減少資料集中資料表的
max_staleness值。
- 如要瞭解合併作業可能需要多久才能完成,請參閱「建議的資料表
- 確認執行遷移作業的使用者在目標區域中,擁有足夠的 BigQuery 資源 (查詢保留項目和背景保留項目)。如要進一步瞭解預留項目,請參閱「預留項目指派」。
- 確認執行遷移作業的使用者具備足夠的權限,例如 Identity and Access Management (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。
視需要刪除原始串流。