将 Datastream 与现有 BigQuery 表搭配使用

如果标准 Datastream 回填耗时过长或存在产品限制,您可以单独将初始数据复制到现有的 BigQuery 表中。通过从特定日志位置将流式变更数据捕获 (CDC) 更新到 BigQuery,您可以保持表同步,而无需运行内置回填。

问题

使用 BigQuery Storage Write API 填充的 BigQuery 表不允许执行 常规数据操纵语言 (DML) 操作。这意味着,在 CDC 数据流开始写入 BigQuery 表后,无法添加表中尚未预填充的历史数据。

请考虑以下场景:

  1. 时间戳 1:启动表复制操作。
  2. 时间戳 2:在复制表期间, 来源处的 DML 操作会导致数据发生更改(添加、更新或移除行)。
  3. 时间戳 3:CDC 开始,但 时间戳 2 期间发生的更改未被捕获,导致数据不一致。

解决方案

为确保数据完整性,CDC 进程必须捕获来源中发生的所有更改,这些更改从复制到 BigQuery 表中的上次更新之后立即开始。

以下解决方案可让您确保 CDC 进程捕获所有 更改(从 时间戳 2 开始),而不会阻止复制操作将 数据写入 BigQuery 表。

前提条件

  • BigQuery 中的目标表必须具有与 Datastream 创建的表完全相同的架构和配置。您可以使用 Datastream BigQuery 迁移工具包 来完成此操作。
  • 对于 MySQL 和 Oracle 来源,您必须能够识别启动复制操作时的日志位置。
  • 数据库必须具有足够的存储空间和适当的日志保留政策,以允许表复制进程完成。

MySQL 和 Oracle 来源

  1. 创建但不启动您打算用于持续 CDC 复制的数据流。数据流需要处于 CREATED 状态。
  2. 准备好启动表复制操作后,请确定数据库的当前日志位置:
    • 对于 MySQL,请参阅 MySQL 文档 ,了解如何获取复制二进制日志坐标。确定日志位置后,关闭会话以释放数据库上的所有锁。
    • 对于 Oracle,请运行以下查询:SELECT current_scn FROM V$DATABASE。
  3. 将表从源数据库复制到 BigQuery。
  4. 复制操作完成后,按照 管理数据流 页面上介绍的步骤,从您之前确定的日志位置启动数据流。

PostgreSQL 来源

  1. 准备好开始复制表时,请创建复制槽。 如需了解详情,请参阅 配置来源 PostgreSQL 数据库。
  2. 将表从源数据库复制到 BigQuery。
  3. 复制操作完成后,创建并启动数据流。