MySQL 连接器¶
MySQL 连接器允许查询和创建外部 MySQL 数据库中的表。这可以用于连接不同系统之间的数据,例如 MySQL 和 Hive,或两个不同的 MySQL 实例之间。
配置¶
要配置 MySQL 连接器,请在 etc/catalog
中创建一个名为 mysql.properties
的目录属性文件,以将 MySQL 连接器作为 mysql
目录挂载。使用以下内容创建该文件,根据您的设置替换连接属性
connector.name=mysql
connection-url=jdbc:mysql://example.net:3306
connection-user=root
connection-password=secret
connection-url
定义了连接信息和要传递给 MySQL JDBC 驱动的参数。URL 支持的参数在 MySQL 开发者指南 中提供。
例如,以下 connection-url
允许您配置 JDBC 驱动程序以基于 UTC 解释时间值,作为服务器上的时区,并作为 已知问题的解决方法。
connection-url=jdbc:mysql://example.net:3306?serverTimezone=UTC
connection-user
和 connection-password
通常是必需的,并确定连接的用户名和密码,通常是服务用户。
多个 MySQL 服务器¶
您可以根据需要创建任意数量的目录,因此如果您有额外的 MySQL 服务器,只需将另一个属性文件添加到 etc/catalog
中,并使用不同的名称(确保以 .properties
结尾)。例如,如果您将属性文件命名为 sales.properties
,Presto 将使用配置的连接器创建名为 sales
的目录。
通用配置属性¶
属性名称 |
描述 |
默认值 |
---|---|---|
|
其值为 JDBC 驱动的用户名的 |
|
|
其值为 JDBC 驱动的用户密码的 |
|
|
不区分大小写地匹配数据集和表名。 |
|
|
远程数据集和表名将缓存的持续时间。设置为 |
|
查询 MySQL¶
MySQL 连接器为每个 MySQL 数据库 提供一个架构。您可以通过运行 SHOW SCHEMAS
来查看可用的 MySQL 数据库
SHOW SCHEMAS FROM mysql;
如果您有一个名为 web
的 MySQL 数据库,您可以通过运行 SHOW TABLES
来查看此数据库中的表
SHOW TABLES FROM mysql.web;
您可以使用以下任一方法查看 web
数据库中 clicks
表的列列表
DESCRIBE mysql.web.clicks;
SHOW COLUMNS FROM mysql.web.clicks;
最后,您可以访问 web
数据库中的 clicks
表
SELECT * FROM mysql.web.clicks;
如果您为目录属性文件使用了不同的名称,请在上述示例中使用该目录名称代替 mysql
。
类型映射¶
PrestoDB 和 MySQL 都支持对方不支持的类型。在从 MySQL 读取或写入 MySQL 时,Presto 会将 MySQL 中的数据类型转换为等效的 Presto 数据类型,以及从 Presto 转换为等效的 MySQL 数据类型。请参阅以下部分了解每个方向的类型映射。
MySQL 到 PrestoDB 类型映射¶
连接器将 MySQL 类型映射到相应的 PrestoDB 类型
MySQL 类型 |
PrestoDB 类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不支持其他类型。
PrestoDB 到 MySQL 类型映射¶
连接器将 PrestoDB 类型映射到相应的 MySQL 类型
PrestoDB 类型 |
MySQL 类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不支持其他类型。
SQL 支持¶
MySQL 连接器允许查询和创建 MySQL 表。以下是支持的 SQL 操作的一些示例
ALTER TABLE¶
ALTER TABLE mysql.web.page_views ADD COLUMN zipcode VARCHAR;
ALTER TABLE mysql.web.page_views RENAME COLUMN zipcode TO location;
ALTER TABLE mysql.web.page_views DROP COLUMN location;
CREATE TABLE¶
在 web
架构中创建一个名为 page_views
的新 MySQL 表
CREATE TABLE mysql.web.page_views (
user_id bigint,
page_url varchar,
ds date,
country varchar
);
注意
Presto 不强制执行主键约束。例如,以下语句
CREATE TABLE users (
id INT PRIMARY KEY,
name TEXT,
email TEXT
);
返回类似以下的错误
Query 20240322_095447_00010_syzb3 failed: line 2:19: mismatched input 'PRIMARY'. Expecting: ')', ','
CREATE TABLE AS SELECT¶
从现有表 page_views
中创建一个名为 page_views_new
的新表
CREATE TABLE mysql.web.page_views_new AS SELECT * FROM mysql.web.page_views;
注意
在 CREATE TABLE AS SELECT
语句中不支持数据压缩等高级 SQL 功能。
CREATE TABLE compressed_employees AS SELECT * FROM employees WITH (compression = 'Zlib');
返回类似以下的错误
查询 20240321_103408_00015_kbd43 失败: 第 1 行 第 67 列: 输入不匹配 '('。 预期: 'DATA', 'NO'
INSERT INTO¶
将数据插入到 page_views
表中
INSERT INTO mysql.web.page_views VALUES(1, 'https://example.com', current_date, 'country');
SELECT¶
SELECT * FROM mysql.web.page_views;
TRUNCATE¶
删除 page_views
表中的所有数据,但不删除表本身
TRUNCATE TABLE mysql.web.page_views;
MySQL 连接器限制¶
以下 SQL 语句不受支持