將 CDC 資料表遷移至其他區域

您可以使用跨區域資料集複製功能,將 Datastream 目的地資料集移至其他 BigQuery 區域或多區域。這個工作流程會更新有效變更資料擷取 (CDC) 資料集的位置,同時盡量縮短串流停機時間,並避免從來源資料庫完整回填歷來資料。

在遷移期間,查詢次要區域可能會傳回不完整或不準確的結果。如要進一步瞭解遷移限制,請參閱「跨區域資料集複製」。

事前準備

開始將資料遷移至其他區域之前,請考量下列事項:

  • 遷移作業需要時間,且您必須在作業期間暫時停止串流。為維護資料完整性,來源資料庫必須在串流暫停時保留變更記錄。如要預估串流應暫停多久,請將資料集中的 max_staleness 值與執行時間最長的合併作業相加:
    • 如要瞭解合併作業可能需要多久才能完成,請參閱「建議的資料表 max_staleness 值」。
    • 如要找出資料集中的最大 max_staleness,請參閱「判斷資料表的目前 max_staleness 值」,並依據特定需求調整查詢。
    • 如果預估暫停時間過長,來源資料庫無法支援,建議您考慮暫時降低資料集中資料表的 max_staleness 值。
  • 確認執行遷移作業的使用者在目的地地區有足夠的 BigQuery 資源 (查詢預留項目和背景預留項目)。如要進一步瞭解預留項目,請參閱「預留項目指派作業」。
  • 確認執行遷移作業的使用者具備足夠權限,例如 Identity and Access Management (IAM) 控制項或 VPC Service Controls。

遷移步驟

如要啟動資料集遷移,請使用 BigQuery 資料複製功能:

  1. 前往 Google Cloud 控制台的「BigQuery Studio」頁面。

    前往 BigQuery Studio

  2. 在新區域建立 BigQuery 資料集副本:

    ALTER SCHEMA DATASET_NAME
    ADD REPLICA 'NEW_REGION'
    OPTIONS(location='NEW_REGION');
    

    更改下列內容:

    • DATASET_NAME:要建立的資料集名稱。
    • NEW_REGION:要建立資料集的區域名稱。例如:region-us。
  3. 監控遷移進度,並等待副本中的複製浮水印與主要執行個體的時間差縮短至幾分鐘內。您可以在 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:建立資料集的區域。
  4. 暫停現有的 Datastream 串流。詳情請參閱「暫停串流」。

  5. 等待串流耗盡,並記下串流進入 PAUSED 狀態的時間。

  6. 請檢查資料表,確認最新的 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 的表格。
  7. 使用步驟 3 的查詢,確認新區域複製浮水印晚於步驟 6 擷取的 upsert_stream_apply_watermark。

  8. (選用) 手動比較原始區域中主要資料集的幾個資料表,與新區域中的副本,確認所有資料都已正確複製。

  9. 在 BigQuery Studio 中執行下列指令,升級 BigQuery 資料集副本:

    ALTER SCHEMA DATASET_NAME
    SET OPTIONS(primary_replica = 'NEW_REGION');
    

    更改下列內容:

    • DATASET_NAME:資料集名稱。
    • NEW_REGION:建立資料集的區域。
  10. (選用) 如果不再需要原始資料集 (現在是副本),且不想產生額外費用,請前往 BigQuery Studio 捨棄原始 BigQuery 資料集:

    ALTER SCHEMA DATASET_NAME DROP REPLICA IF EXISTS ORIGINAL_REGION;
    

    更改下列內容:

    • DATASET_NAME:原始資料集的名稱。
    • ORIGINAL_REGION:原始資料集的區域。
  11. 建立新串流,採用完全相同的設定,但使用新的 BigQuery 目的地位置。

  12. 開始新的直播。

    如要避免複製重複的事件,請從特定位置啟動串流:

    • MySQL 和 Oracle 來源:您可以檢查原始串流的記錄,找出串流成功讀取的最後一個位置,藉此判斷記錄位置。如要瞭解如何從特定位置啟動串流,請參閱「管理串流」。
    • PostgreSQL 來源:新串流會從複製運算單元中的第一組記錄檔序號 (LSN) 開始讀取變更。由於原始串流可能已處理部分變更,請手動將複製運算單元的指標變更為 Datastream 讀取的最後一個 LSN。您可以在 Datastream 消費者記錄中找到這個 LSN。
  13. 視需要刪除原始串流。