关于 Snowflake Connector for MySQL

备注

使用 Snowflake Connector for MySQL 需遵守 Connector 条款

Snowflake Connector for MySQL 允许您执行以下操作:

  • 从 MySQL 数据库中将数据加载到 Snowflake。

  • 配置复制,以便将 MySQL 数据库中的更改复制到 Snowflake。

要处理 Snowflake 和 MySQL 之间的连接,连接器使用代理。代理以 Docker 映像的形式分发。代理在您的网络中运行,用于将数据推送到您的 Snowflake 账户。

备注

Snowflake Connector for MySQL 要求始终运行代理应用程序的一个实例。

正在进行的增量更新使用变更数据捕获 (CDC) 技术,该技术捕获在源数据库上执行的变更。变更包括 INSERT、UPDATE 和 DELETE 操作,这些操作会自动复制到 Snowflake 中的目标数据库。

多个应用程序实例

您可以在 Snowflake 账户中安装多个 Snowflake Connector for MySQL 实例。有关更多信息,请参阅 可选:安装 Snowflake Connector for MySQL 的多个实例

代理和连接器应用程序兼容性

Snowflake Connector for MySQL 是针对特定版本发布的,描述为 x.y.z 版本,其中 x 为主要版本,y 为次要版本,z 为补丁。dockerhub 上的代理也随 X.Y.Z 版本发布。Snowflake Connector for MySQL 的每个 x.y.z 版本都支持具有相同主版本 X=x 的所有代理,而不是较大的次要版本代理。此外,Snowflake Connector for MySQL 的每个 x.0.0 版本都支持所有 (x-1).Y.Z 版本的代理,适用于所有 Y 和 Z。

已知限制

以下各节介绍连接器的已知限制。

表的最大数量

该连接器最多可与 200 个添加到复制中的源表配合使用。添加更多表可能会导致连接器变得不稳定。

事务大小

连接器受与 MySQL 组复制相同的 限制 (https://dev.mysql.com/doc/refman/8.4/en/group-replication-limitations.html#group-replication-limitations-transaction-size)。这意味着单个事务必须适合不超过 4GB 的二进制日志消息。超过此大小的事务将导致源表被标记为永久失败,并且需要对关联的表进行完整快照重新加载。

连接器可用性

安装连接器时请注意以下限制:

  • 不支持政府区域中的账户。

  • 要安装和配置连接器,您必须以具有 ACCOUNTADMIN 角色的用户的身份登录。目前不支持其他角色。

类型兼容性

由于源数据库和 Snowflake 列类型之间的差异,由于最大列容量或允许的范围,某些值无法转换和写入 Snowflake。例如:

  • Snowflake BINARY 类型的最大长度为 8 MB(8,388,608 字节)

  • Snowflake 日期类型(如 DATEDATETIMETIMESTAMP)最大年份为 9999

  • Snowflake VARCHAR 类型的最大长度为 16 MB(16,777,216 字节)

如果发生这种不兼容,表的复制将停止,并失败。

源表架构更改

下表显示了对源表架构的不同类型的更改,以及是否支持这些更改,如果支持,如何支持。

新列名应遵循“标识符限制”一节中所述的限制。

架构更改的类型

支持?

备注

添加新列

新列将在目标表中可见,就像复制开始时存在的任何其他列一样。

无法添加与以前删除或重命名的列同名的新列。

例如,如果列 AB 最初存在,但 A 被删除,B 重命名为 B2 - 无法添加名为 AB 的列。

删除现有列

如果源表中删除了一列,则目标表中不会删除该列。相反,采用软删除方法,该列将重命名为 <previous name>__SNOWFLAKE_DELETED,以便仍然可以查询历史值。删除列后复制的所有行都将在此列中具有 NULL 值。

例如,如果删除列 A,它将在目标表中重命名为 A__SNOWFLAKE_DELETED,列的内容保持不变。

重命名列

重命名列等同于删除列,然后使用新名称创建一个新列。删除操作遵循上一行中解释的软删除方法。

例如,如果将列 A 重命名为 B - 在目标表中,A 重命名为 A__SNOWFLAKE_DELETED,并添加了一个新列 B。更改前存在的所有行都将该列的值保留在 A__SNOWFLAKE_DELETED 列中,而更改后添加的新行的值将保留在 B 列中。

无法将列重命名为与以前删除或重命名的列相同的名称。例如,如果列 ABC 最初存在,但 A 被删除,B 重命名为 B2 - 无法将列 C 重命名为 AB

更改列的类型

部分

只有在 Snowflake 中将前一个类型和新类型都映射到同一类型时,才能更改源表列的类型。

在任何其他情况下,复制都将永久失败。

更改数值列的精度

更改源表列的精度将导致复制永久失败。

更改数值列的小数位数

更改源表列的比例将导致复制永久失败。

更改主键定义

更改源表列的主键定义将导致复制永久失败。

高容量列

活动代理连续从二进制日志中读取所有事件,即使某些事件引用了未添加用于复制的源表也是如此。如果二进制日志复制包含非常大的事件,如类 BLOB 列的更新,则代理可能会因为缺少可用内存而崩溃。

主键

不支持没有主键的表。

标识符限制

目前,连接器不支持在复制架构、表或列名中使用 " 字符。此外,不支持以下关键字:

对于架构名称:
  • INFORMATION_SCHEMA

对于列名称:
  • _SNOWFLAKE_INSERTED_AT

  • _SNOWFLAKE_UPDATED_AT

  • _SNOWFLAKE_DELETED

  • 后缀为 __SNOWFLAKE_DELETED 的名称

  • Snowflake 保留和有限关键字 中标记为 Cannot be used as column name 的列名

MySQL 版本 >= 8.0.0

目前,连接器依赖于 MySQL 版本 8 中推出的 binlog_row_metadata = full 配置属性。

源数据库授权

不支持对源数据库的私钥授权。仅支持通过用户和密码进行授权。

语言: 中文