在 Snowflake 中查看 MySQL 数据

备注

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

连接器将数据复制到目标数据库,该数据库是在设置连接器并调用 PUBLIC.ADD_DATA_SOURCE('<data_source_name>', '<dest_db>') 时定义的。

数据表包含复制的数据,并在标识符 dest_db.schema_name.table_name 下可用,其中:

  • dest_db 是目标数据库的名称。

  • schema_name 是原始 MySQL 表位于其中的架构名称。

  • table_name 是原始 MySQL 表的名称。

备注

dest_dbschema_nametable_name 需要放在双引号里,以防它们的名称是混合大小写。

复制的表包含额外的元数据列:

列名称

数据类型

描述

_SNOWFLAKE_INSERTED_AT

TIMESTAMP_NTZ

将行插入目标表时的时间戳,采用 UTC 时间。

_SNOWFLAKE_UPDATED_AT

TIMESTAMP_NTZ

行在目标表中最后一次更新时的时间戳,采用 UTC 时间。

_SNOWFLAKE_DELETED

BOOLEAN

如果行已从源表中删除,则值为 true

映射复制的数据类型以与 Snowflake 类型相匹配。有关更多信息,请参阅 MySQL 到 Snowflake 数据类型的映射

复制的数据访问控制

要控制对复制的数据的访问,请使用 DATA_READER 应用程序角色。关于连接器应用程序角色的更多信息:Snowflake Connector for MySQL 中的应用程序角色 要对特定目标对象进行更细粒度的控制,请使用 ACCOUNTADMIN 角色以授予适当的权限或创建数据库角色。

MySQL 到 Snowflake 数据类型的映射

在 Snowflake 中,复制表的列名是大写的,映射类型以与 Snowflake 类型相匹配。

下表显示了连接器数据类型如何映射到 Snowflake 类型。

MySQL 类型

Snowflake 类型

备注

DECIMAL / NUMERIC

NUMBER

对于 MySQL,采用 DECIMAL 格式的数字的最大位数是 65。对于 Snowflake,最大位数是 38。

最高支持 Snowflake 中允许的最大位数。如果超出该最大位数,将达不到精度要求。有关更多信息,请参阅 数值数据类型

INT / INTEGER

INT

TINYINT / BOOL

INT

SMALLINT

INT

MEDIUMINT

INT

BIGINT

INT

YEAR

INT

FLOAT

FLOAT

DOUBLE

FLOAT

VARCHAR

VARCHAR

TINYTEXT

VARCHAR

TEXT

VARCHAR

ENUM

VARCHAR

存储为字符串。例如,对于 ENUM('one', 'two'),可能的值有:'one'、'two'。

SET

VARCHAR

按列声明顺序存储为逗号连接的字符串。例如,对于 SET('one', 'two'),可能的值有:' '、'one'、'two'、'one,two'。

MEDIUMTEXT

VARCHAR

最高支持 Snowflake 中的最大条目大小 (16MB)。

LONGTEXT

VARCHAR

最高支持 Snowflake 中的最大条目大小 (16MB)。

CHAR

VARCHAR

已发送到 Snowflake,不含尾随空格。

BIT

VARCHAR

以十六进制表示,例如:'83060c183060c183'。

DATE

DATE

在目标表中存储为字符串,例如 '1971-01-31'。在扁平化视图中,日期被转换为 DATE。

DATETIME

DATETIME / TIMESTAMP_NTZ

TIMESTAMP

TIMESTAMP_TZ

在目标表中存储为字符串,采用 UTC,例如 '2000-12-30 23:59:59.001009+00:00'。在扁平化视图中,将时间戳转换为 TIMESTAMP_TZ。

TIME

TIME

在目标表中存储为字符串,例如 '23:59:59'。在扁平化视图中,将时间值转换为 TIME。

BINARY

BINARY

MEDIUMBLOB

BINARY

最高支持 Snowflake 中的最大条目大小,即 16MB。

LONGBLOB

BINARY

最高支持 Snowflake 中的最大条目大小,即 16MB。

BLOB

BINARY

VARBINARY

BINARY

TINYBLOB

BINARY

JSON

VARIANT

JSON 可以作为完整文档或部分更新存储在 MySQL BinLog 中。默认情况下,它作为完整文档存储。当前不支持部分更新。

将 JSONs 作为字符串发送到 Snowflake,但 Snowpipe Streaming 会将它们转换为 VARIANT 数据类型,并在内部将它们存储为 ARRAY、OBJECT 等。

最高支持 Snowflake 中的最大条目大小,即 16MB。

故障后恢复快照加载

如果在快照加载期间,数据库代理与连接器之间的连接丢失,由于时间和成本优化,连接器将继续从之前停止的点加载快照。无论代理是否被重启,或者源数据库与数据库代理之间、数据库代理与连接器之间的连接是否存在问题,这种情况都会发生。

此功能适用于以下类型的主键列:

  • TINYINT

  • SMALLINT

  • MEDIUMINT

  • INT

  • BIGINT

  • ENUM

  • CHAR

  • TINYTEXT

  • VARCHAR

  • TEXT

如果主键是其他类型,则在特定列的连接失败后,快照加载将从头开始。

查看已删除列的数据

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

例如,如果删除了一个列 A,它将在目标表中重命名为 A__SNOWFLAKE_DELETED,可以进行查询

SELECT A__SNOWFLAKE_DELETED FROM <TABLE_NAME>;
Copy

查看重命名列的数据

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

例如,如果列 A 被重命名为 B - 在目标表 A 中被重命名为 A__SNOWFLAKE_DELETED,并且添加了一个新列 B。在更改之前存在的所有行保留 A__SNOWFLAKE_DELETED 列中的值,而在更改后添加的新行则具有 B 列中的值。重命名列中的值可以通过简单的查询视为单列:

SELECT
     CASE WHEN B IS NULL THEN A__SNOWFLAKE_DELETED ELSE B END AS A_RENAMED_TO_B
FROM <TABLE_WITH_RENAMED_COLUMN>;
Copy

在重命名列后,可以创建视图以简化使用。

后续步骤

完成这些过程后,请在 Snowflake Connector for MySQL 正在进行的任务 中查看流程

语言: 中文