为 Snowflake 设置增量转移
本指南介绍了如何配置从 Snowflake 到 BigQuery 的增量数据转移。借助增量转移,您可以仅转移自上次转移运行以来发生更改的数据,从而缩短转移时间并降低转移费用。
限制
增量 Snowflake 转移作业受到以下限制:
- 您必须提供主键列才能使用 upsert 写入模式。如需了解更多 信息,请参阅为增量 转移定义主键。
- 主键在源表中必须是唯一的。如果存在重复项,BigQuery 中的合并操作结果可能会不一致,并且与源数据不匹配。
- 不支持使用增量转移自动处理架构更改。如果源表的架构发生更改,您必须手动更新 BigQuery 表架构。
- 当源数据中的更改集中在少量分区中时,增量转移的效果最佳。如果更新分散在源表中,增量转移的性能可能会显著下降,因为这需要扫描许多分区。如果您在数据转移之间更改了许多行,建议您改用完整转移。
- Snowflake 中的某些操作(例如
CREATE OR REPLACE TABLE或CLONE)可能会覆盖原始表对象及其关联的更改跟踪历史记录。这会导致现有数据转移过时,并且需要进行新的完整同步才能恢复增量转移。 - 必须以足够的频率运行增量转移,以使其保持在 Snowflake 的更改跟踪数据保留期限 内。如果上次成功转移是在此时间窗口之外运行的,则下一次转移将是完整转移。
配置增量转移
您可以在设置Snowflake 转移作业时,在转移作业配置中选择 增量写入 偏好设置来配置增量转移。
如果您为 数据传输选择增量 ,则可以通过附加 或 upsert 写入 模式进行传输,这两种模式定义了在 增量数据传输期间如何将数据写入 BigQuery。如需启用 upsert 写入模式,您必须在 自定义架构文件中定义主键。如果未定义主键,则转移作业默认使用附加 写入模式。以下部分介绍了可用的写入模式。
附加写入模式
附加写入模式只会向目标表中插入新行。此选项会严格卸载源表中插入的新行,并附加转移的数据,而不检查是否存在现有记录,因此这种模式可能会导致目标表中的数据重复。
Upsert 写入模式
借助 upsert 写入模式,您可以使用主键在目标表中更新、插入或删除记录。如果指定的主键存在于目标 BigQuery 表中,Snowflake 连接器会正确插入、更新或删除记录以反映更改。如果目标表中不存在主键,连接器会为源插入或更新插入新记录,而在此情况下会跳过删除。
如需将 upsert 写入模式用于增量数据传输,您必须 在自定义架构文件中定义主键。选择主键时,请注意以下事项:
主键可以是表中的一列或多列,连接器需要这些列来标识要更新的记录。
选择包含非 null 值且在表的所有行中都唯一的列。我们建议使用包含系统生成的标识符、唯一参考代码(例如自动递增的 ID)或不可变、基于时间的序列 ID 的列。
为防止潜在的数据丢失或数据损坏,您选择的主键列必须具有唯一值。如果您对所选主键列的唯一性有疑问,建议您改用附加写入模式或完整提取。
架构更改行为
增量转移不支持架构演变。对源表架构的任何修改(例如添加、移除、重命名列或更改列数据类型)都会导致后续增量转移运行失败。如果源架构发生更改,您必须运行完整数据传输才能重新同步数据。
用于增量转移的自定义架构文件
您可以使用自定义架构文件为主键定义增量转移,并自定义架构映射。自定义架构文件是一个描述源架构和目标架构的 JSON 文件。
对于 upsert 模式下的增量转移,您必须将一列或多列标识为主键。为此,请在自定义架构文件中使用 PRIMARY_KEY 使用类型标注列。
以下示例展示了一个自定义架构文件,该文件将 orders 表的 O_ORDERKEY 和 O_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 转移。