关于 Openflow Connector for Google BigQuery¶
备注
此连接器受 Snowflake 连接器条款 的约束。
Openflow Connector for Google BigQuery 将 Google BigQuery 项目连接到 Snowflake,并按计划从选定的数据集、表和视图中复制数据。连接器对每个表执行初始完全加载,然后使用 BigQuery 的原生变更跟踪功能。使用截断和加载策略复制视图。
用例¶
连接器支持以下用例:
复制到 Snowflake: 持续将数据集从 BigQuery 镜像到 Snowflake,用于下游分析和建模。增量变更按计划到达,延迟窗口为 10 分钟。
选择性复制: 使用名称或正则表达式过滤器定义要包含的区域、数据集、表和视图,以实现广泛覆盖并兼顾控制。
迁移和变更捕获: 为迁移执行一次性快照加载,然后利用 BigQuery 的变更历史运行增量同步,以保持表同步。
视图复制: 按照可配置的时间表,使用截断并加载的策略,将标准视图和物化视图 BigQuery 复制到 Snowflake。
表复制生命周期¶
表的复制周期从架构发现和数据的初始快照加载开始。将数据引入 Snowflake 后,周期将转换为增量同步。
架构自检: 连接器发现源表的模式,验证其数据类型,并在 Snowflake 中创建相应的目标架构和表。
快照加载: 创建架构和表后,连接器将 BigQuery 表中所有现有数据完整复制到 Snowflake。此过程按顺序对配置中的每个表依次执行。
增量同步: 初始加载完成后,表将进入计划增量同步模式。在每次运行时,连接器使用 BigQuery 的 CHANGES 函数读取自上次同步以来发生的行级变更日志(插入、更新、删除)。然后,提取这些变更并将其合并到 Snowflake 中的目标表中。
Openflow 要求¶
最小运行时大小必须为 Medium。如果要复制大量数据,请使用更大的运行时和多节点 Openflow 设置。
限制¶
BigQuery 保证用于获取源数据的数据流在至少 6 小时内保持有效。因此,读取源表的过程必须在 6 小时内完成,以防止数据流过期。当摄取数据量超过 100GB 的表时,您必须使用更大的多节点运行时环境。
BigQuery 的 BIGNUMERIC 类型支持比 Snowflake 的 NUMBER 类型(38 位)更高的精度(最高 76 位)。连接器无法从超过 Snowflake 限制的 BIGNUMERIC 列中引入值。
连接器不支持外部表的复制。
视图复制仅使用截断和加载策略。视图不支持增量同步 (CDC)。
增量同步需要主键来正确处理更新和删除操作。对于没有主键的表,连接器不支持删除,并将更新视为新插入。
备注
您必须确保满足主键约束。如果标记为主键的字段不唯一,则在增量模式下可能会出现数据不一致的情况。
连接器使用 BigQuery 的 CHANGES (https://cloud.google.com/bigquery/docs/reference/standard-sql/time-series-functions#changes) 函数进行增量更新。由于此函数无法查询最近十分钟的表历史记录,增量模式下的复制数据与源数据相比至少有 10 分钟的延迟。
由于 BigQuery CHANGES 函数的限制,增量同步过程最多只能处理 24 小时的数据窗口。如果表的复制延迟超过此期限,连接器会将变更窗口截断至 24 小时以继续同步。这种截断可能会导致数据丢失。
连接器继承了 BigQuery CHANGES 函数的所有其他限制。有关更多信息,请参阅 BigQuery CHANGES 函数文档 (https://cloud.google.com/bigquery/docs/reference/standard-sql/time-series-functions#changes)。
视图复制¶
连接器支持将标准视图和物化视图从 BigQuery 复制到 Snowflake。与表复制不同,视图不支持增量同步 (CDC)。取而代之的是,连接器采用 清空并加载 策略:在每个同步周期,连接器都会用源视图的当前内容完全替换 Snowflake 目标表中的数据。
视图同步频率通过 视图同步频率 参数单独配置,与表的增量同步频率不同。运行不会重叠。如果一个周期耗时超过配置的时间间隔,下一次运行会等待上一次运行完成后再开始。
您可以使用 要包含的视图名称 和 要包含的视图名称正则表达式 参数来筛选要复制的视图。这些筛选器适用于所有选定进行复制的数据集。
在视图引入期间,连接器会在 BigQuery 中创建临时表。使用 临时表数据集 参数为这些临时表指定一个专门的数据集。Snowflake 建议为临时表使用单独的数据集,而不应为此目的使用已摄取的数据集。
数据类型映射¶
连接器将 BigQuery 数据类型映射为对应的 Snowflake 数据类型。
BigQuery 数据类型 |
Snowflake 数据类型 |
|---|---|
BIGNUMERIC |
NUMBER |
NUMERIC |
NUMBER |
GEOGRAPHY |
VARCHAR |
DATETIME |
TIMESTAMP_NTZ |
JSON |
OBJECT |
STRUCT |
OBJECT |
RANGE |
OBJECT |
INTERVAL |
OBJECT |
TIMESTAMP |
TIMESTAMP_NTZ |
DATE |
DATE |
TIME |
TIME |
INT64 / INTEGER |
NUMBER |
FLOAT64 |
FLOAT |
BOOL / BOOLEAN |
BOOLEAN |
STRING |
VARCHAR |
BYTES |
BINARY |
ARRAY |
ARRAY |
跟踪 Google BigQuery 中的数据变化¶
连接器的增量同步功能基于 BigQuery 的原生 CHANGES 函数 (https://cloud.google.com/bigquery/docs/reference/standard-sql/time-series-functions#changes) 构建。当您在源表上启用变更历史记录时,BigQuery 会维护一个包含所有行级修改(插入、更新和删除)的内部日志。
连接器按照配置的增量同步频率计划查询此日志,以获取变更流。连接器将这些变更物化到同一 BigQuery 数据集内的一个日志表中。此日志表遵循一致的命名约定:<sourceTableName>_<incremental_number>_<hash>_journal
这些日志表在复制过程中完全由连接器管理,用于将数据合并到 Snowflake 中的最终目标表中。
警告
请勿以任何方式修改日志表。修改日志表可能会中断同步过程并导致数据完整性问题。
合并操作对有主键 (PK) 的表和没有主键的表处理变更的方式不同。
具有主键的表¶
对于有主键的表,连接器按以下方式处理数据变更:
- 插入和更新:
标识为
INSERT或UPDATE的行会被“插入”到对应的 Snowflake 表中。- 删除:
为了保留数据历史记录,连接器使用软删除策略。连接器不会从 Snowflake 中物理删除已删除的行,而是对目标行执行
UPDATE操作,将_SNOWFLAKE_DELETED列设置为TRUE。
没有主键的表¶
对于没有主键的表,连接器按如下方式处理数据变更:
- 插入和更新:
标识为
INSERT或UPDATE的行会以相同方式处理,并被插入到对应的 Snowflake 表中。- 删除:
不支持。
备注
连接器在创建目标表时会自动添加 _SNOWFLAKE_DELETED (BOOLEAN) 列。
配置的同步频率计划与实际同步频率¶
增量同步频率计划决定表同步频率。如果您指定的计划频率高于实际同步表所需的时间,系统将不会遵循您指定的计划。这是因为增量周期必须按顺序执行,不能重叠。
架构演化¶
连接器支持源 BigQuery 表中的几种常见模式更改。检测到以下架构变更并将其传播到 Snowflake 目标表:
- 列添加:
在 BigQuery 中添加的新列会自动添加到对应的 Snowflake 表中。
- 列删除(软删除):
当 BigQuery 中的列被移除时,连接器会在 Snowflake 中执行“软删除”。该列不会从目标表中被移除。相反,它会在列名的末尾添加
_SNOWFLAKE_DELETED后缀来进行重命名。例如,my_column变为my_column_SNOWFLAKE_DELETED。这会在 Snowflake 中保留历史数据。- 列重命名:
列重命名操作分为两个步骤:
原始列被“软删除”,并通过添加
_SNOWFLAKE_DELETED后缀进行重命名。具有新名称的新列将添加到 Snowflake 表中。
- 主键修改:
支持添加、移除和变更主键。
- 数据类型变更:
仅允许进行使现有类型变宽的更改。不支持任何缩窄列类型或将其转换为不兼容类型的更改,此类更改将导致该表的复制失败。
后续步骤¶
有关如何设置连接器的信息,请参阅以下主题: