管理数据流对象的回填

Datastream 中的数据流可以回填历史数据,并将正在进行的更改流式传输到目标位置。在创建数据流的过程中,您 配置了有关数据流的 源数据库的信息

如果您选中回填历史数据 复选框,则 Datastream 会将所有现有数据以及对数据的更改从来源流式传输到目标位置。

如果您未选中此复选框,则 Datastream 只会流式传输对数据的更改。如需让 DataStream 将所有现有数据的快照从来源流式传输到目标位置,您必须为包含此数据的对象启动回填。这些对象的格式包括数据库架构、表和列。

为对象启动回填的另一个原因是来源与目标位置之间的数据不同步。例如,用户可以意外删除目标位置中的数据,而这些数据现在丢失。在这种情况下,为对象启动回填可用作“重置机制”,因为所有数据都一次性流式传输到目标位置。因此,数据会在来源和目标位置之间同步。

启动对象的回填后,您可以停止该对象的回填。在前面的示例中,用户修改了数据库架构,导致架构或数据损坏。您不希望将此架构或数据流式传输到目标位置,因此需停止对象的回填。

您还可以停止对象的回填来实现负载均衡。 Datastream 可以并行运行多个回填。这可能会给来源带来额外的负担。如果负载显著,请停止对象的回填,然后逐个启动对象的回填。

对象状态

启动和停止对象回填的生命周期中的各种状态包括:

  • 无状态(在界面中表示为 -):接收此状态的对象的原因包括:

    • 数据流尚未启动。
    • 未选中回填历史数据 复选框(因此回填被定义为手动)。
    • 系统明确地将对象从自动回填中排除。
    • 数据流被配置为包含将来的表。如果出现这种情况,则在将新表添加到来源时,系统不会为它们创建自动回填任务(因为新表通常没有任何要回填的历史数据)。
  • Pending:对象尚未启动回填。

  • Active:对象正在进行回填。

  • Completed:对象已完成回填。

  • Stopped:对象已停止回填。如果再次为对象启动回填,则 Datastream 会将与该对象关联的所有现有数据从来源流式传输到目标位置。

  • Failed:对象回填失败,必须再次启动回填。

启动回填

  1. 前往数据流 页面,在 Google Cloud 控制台中。

    前往“数据流”页面

  2. 点击包含要为其启动回填的对象的数据流。

  3. 点击对象 标签页。

  4. 选中要为其启动回填的每个对象对应的复选框。

  5. 点击启动回填

  6. 如果您只选择了一个对象,请在对话框中点击启动对象回填 。否则,如果您选择了多个对象,请点击启动对象回填

    Datastream 将为您选择的对象启动回填,并且每个对象的状态将从 Pending 更改为 Active,再更改为 Completed。当对象的状态为 Completed 时,表示 Datastream 已读取该对象的所有数据,但数据可能仍在加载到目标位置。

启动部分回填

除了完整回填之外,您还可以执行部分回填,以将来源中的特定数据子集加载到目标位置。为此,您需要提供 SQL WHERE 子句作为自定义过滤条件。

Datastream 支持对以下来源进行部分回填:

  • SQL Server
  • Spanner
  • Oracle
  • PostgreSQL

如需启动部分回填,请按以下步骤操作:

  1. 前往数据流 页面,在 Google Cloud 控制台中。

    前往“数据流”页面

  2. 点击包含要为其启动回填的对象的数据流。

  3. 点击对象 标签页。

  4. 选择要为其启动回填的对象。

  5. 点击启动回填

  6. 在随即显示的面板中,选中启用自定义过滤条件 复选框。

  7. 输入 SQL WHERE 子句。例如,product_id > 12 AND timestamp = '2025-01-06T22:00:00.00'

  8. 点击启动回填

Datastream 会验证过滤条件。如果验证失败,编辑器上方会显示一条错误消息。如果验证成功,Datastream 会启动回填作业。

支持的自定义过滤条件语法

当您提供自定义过滤条件时,Datastream 支持 SQL WHERE 子句语法的基本子集。支持的元素包括:

  • 逻辑运算符ANDOR
  • 比较运算符=<><=>=!=
  • 条件: INNOT INIS NULLIS NOT NULL
  • 分组:用于定义条件组的英文括号 ()
    • 字符串:用英文单引号括起来的文本,例如 'value'
    • 数字:整数 (123)、小数 (123.45)、负数 (-10) 和带指数的数字 (1.2e3)。
    • 布尔值:区分大小写的关键字 TRUEFALSE
  • 标识符

    • 限定:可以使用英文句点完全限定列名称,以指定 架构或表,例如 myColumnmyTable.myColumnmySchema.myTable.myColumn
    • 不带英文引号的标识符:可以包含字母、数字和下划线,并且必须以字母或下划线开头。列名或表名是否区分大小写取决于目标数据库。
    • 带英文双引号的标识符:必须用英文双引号 (") 括起来。

部分回填限制

某些语句、运算符和关键字被明确禁止,使用它们会导致错误。其中包括:

  • 注释,例如 --/* */
  • 函数,例如 UPPER(column)NOW()
  • 算术表达式,例如 column + 1 > 10
  • LIKE 运算符。LIKE 不支持通配符(例如 %_)。
  • BETWEEN 运算符。请改用 >=<=
  • 子查询,例如 WHERE 子句中的 (SELECT ...)
  • CASE 语句,例如 CASE WHEN ... END
  • 列比较,例如 column1 = column2。比较必须针对字面量。
  • DATETIME 特定类型或函数。
  • 数组或 JSON 特定运算符。
  • 显式转换:例如 CAST(column AS INT)

停止回填

  1. 前往数据流 页面,在 Google Cloud 控制台中。

    前往“数据流”页面

  2. 点击包含要为其停止回填的对象的数据流。

  3. 点击对象 标签页。

  4. 选中要为其停止回填的每个对象对应的复选框。

  5. 点击停止回填

  6. 如果您只选择了一个对象,请在对话框中点击停止对象回填 。否则,如果您选择了多个对象,请点击停止对象回填

    Datastream 将为您选择的对象停止回填,并且每个对象的状态将更改为 Stopped

    当对象处于此状态时,则表示该对象已停止回填。如果再次为对象启动回填,则 Datastream 会将与该对象关联的所有现有数据从来源流式传输到目标位置。

后续步骤