为 Snowflake 设置增量转移

本指南介绍了如何配置从 Snowflake 到 BigQuery 的增量数据转移。借助增量转移,您可以仅转移自上次转移运行以来发生更改的数据,从而缩短转移时间并降低转移费用。

限制

增量 Snowflake 转移作业受到以下限制:

  • 您必须提供主键列才能使用 upsert 写入模式。如需了解更多 信息,请参阅为增量 转移定义主键
  • 主键在源表中必须是唯一的。如果存在重复项,BigQuery 中的合并操作结果可能会不一致,并且与源数据不匹配。
  • 不支持使用增量转移自动处理架构更改。如果源表的架构发生更改,您必须手动更新 BigQuery 表架构。
  • 当源数据中的更改集中在少量分区中时,增量转移的效果最佳。如果更新分散在源表中,增量转移的性能可能会显著下降,因为这需要扫描许多分区。如果您在数据转移之间更改了许多行,建议您改用完整转移。
  • Snowflake 中的某些操作(例如 CREATE OR REPLACE TABLECLONE)可能会覆盖原始表对象及其关联的更改跟踪历史记录。这会导致现有数据转移过时,并且需要进行新的完整同步才能恢复增量转移。
  • 必须以足够的频率运行增量转移,以使其保持在 Snowflake 的更改跟踪数据保留期限 内。如果上次成功转移是在此时间窗口之外运行的,则下一次转移将是完整转移。

配置增量转移

您可以在设置Snowflake 转移作业时,在转移作业配置中选择 增量写入 偏好设置来配置增量转移。

如果您为 数据传输选择增量 ,则可以通过附加upsert 写入 模式进行传输,这两种模式定义了在 增量数据传输期间如何将数据写入 BigQuery。如需启用 upsert 写入模式,您必须在 自定义架构文件中定义主键。如果未定义主键,则转移作业默认使用附加 写入模式。以下部分介绍了可用的写入模式。

附加写入模式

附加写入模式只会向目标表中插入新行。此选项会严格卸载源表中插入的新行,并附加转移的数据,而不检查是否存在现有记录,因此这种模式可能会导致目标表中的数据重复。

Upsert 写入模式

借助 upsert 写入模式,您可以使用主键在目标表中更新、插入或删除记录。如果指定的主键存在于目标 BigQuery 表中,Snowflake 连接器会正确插入、更新或删除记录以反映更改。如果目标表中不存在主键,连接器会为源插入或更新插入新记录,而在此情况下会跳过删除。

如需将 upsert 写入模式用于增量数据传输,您必须 在自定义架构文件中定义主键。选择主键时,请注意以下事项:

  • 主键可以是表中的一列或多列,连接器需要这些列来标识要更新的记录。

  • 选择包含非 null 值且在表的所有行中都唯一的列。我们建议使用包含系统生成的标识符、唯一参考代码(例如自动递增的 ID)或不可变、基于时间的序列 ID 的列。

  • 为防止潜在的数据丢失或数据损坏,您选择的主键列必须具有唯一值。如果您对所选主键列的唯一性有疑问,建议您改用附加写入模式或完整提取。

架构更改行为

增量转移不支持架构演变。对源表架构的任何修改(例如添加、移除、重命名列或更改列数据类型)都会导致后续增量转移运行失败。如果源架构发生更改,您必须运行完整数据传输才能重新同步数据。

用于增量转移的自定义架构文件

您可以使用自定义架构文件为主键定义增量转移,并自定义架构映射。自定义架构文件是一个描述源架构和目标架构的 JSON 文件。

对于 upsert 模式下的增量转移,您必须将一列或多列标识为主键。为此,请在自定义架构文件中使用 PRIMARY_KEY 使用类型标注列。

以下示例展示了一个自定义架构文件,该文件将 orders 表的 O_ORDERKEYO_ORDERDATE 定义为主键:


{
  "databases": [
    {
      "name": "my_db",
      "originalName": "my_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "usageType": [
                "PRIMARY_KEY"
              ]
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "usageType": [
                "PRIMARY_KEY"
              ]
            }
          ]
        }
      ]
    }
  ]
}

启用更改跟踪

在设置增量 Snowflake 转移之前,您必须使用以下命令在每个源表上启用更改跟踪:

ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;

如果未为表启用更改跟踪,Snowflake 连接器会默认对该表执行完整数据传输。

后续步骤

配置完增量 Snowflake 转移所需的所有步骤后,您可以为 Snowflake 转移配置启用增量转移。如需了解详情,请参阅 设置 Snowflake 转移