在 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_db
、schema_name
和 table_name
需要放在双引号里,以防它们的名称是混合大小写。
复制的表包含额外的元数据列:
列名称 |
数据类型 |
描述 |
---|---|---|
|
TIMESTAMP_NTZ |
将行插入目标表时的时间戳,采用 UTC 时间。 |
|
TIMESTAMP_NTZ |
行在目标表中最后一次更新时的时间戳,采用 UTC 时间。 |
|
BOOLEAN |
如果行已从源表中删除,则值为 |
映射复制的数据类型以与 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。
|
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>;
查看重命名列的数据¶
重命名列等同于删除列,然后使用新名称创建一个新列。删除操作遵循前一节中解释的软删除方法。
例如,如果列 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>;
在重命名列后,可以创建视图以简化使用。
后续步骤¶
完成这些过程后,请在 Snowflake Connector for MySQL 正在进行的任务 中查看流程