本页介绍了在以下用例中的最佳实践:您已设置将 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
状态的时间。检查表的
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
。
使用第 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。
(可选)删除原始视频流。