将 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. 通过检查表的 upsert_stream_apply_watermark ,确认最新的 CDC 更改已应用于 BigQuery 表。运行以下查询,并确保水印时间戳比流暂停时晚 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. (可选)删除原始流。