使用MySQL连接器能够让您在外部MySQL实例中查询和创建表。该连接器可以用于不同系统(例如,MySQL和Hive),或者两个不同MySQL实例间的数据进行JOIN操作。
背景信息
本文为您介绍MySQL连接器相关的内容和操作,具体如下:
前提条件
- 已创建DataLake集群或Hadoop集群,并选择了Presto服务,或者创建单独的Presto集群,详情请参见创建集群。
- 已购买RDS,详情请参见创建RDS MySQL实例。
使用限制
- EMR-3.38.0及后续版本的Hadoop集群或Presto集群,支持配置MySQL连接器。
- 连接的MySQL需要是5.7、8.0版本或更高的版本。
- Presto的Coordinator和所有Worker节点必须能够访问MySQL,默认端口为3306。
- 暂不支持下列SQL命令:
- DELETE
- GRANT
- REVOKE
- SHOW GRANTS
- SHOW ROLES
- SHOW ROLE GRANTS
配置MySQL连接器
修改MySQL连接器配置,详情请参见配置连接器。
连接器默认配置
进入EMR控制台的Presto服务的配置页面,在服务配置区域,单击mysql.properties页签,修改以下参数,参数值请根据您实际情况修改。
参数 | 描述 |
---|---|
connection-url | 数据连接字符串,详情请参见查看或修改内外网地址和端口。 例如,jdbc:mysql://rm-2ze5ipacsu8265q****.mysql.rds.aliyuncs.com:3306。 |
connection-user | 数据库的用户名。该用户具有访问上述RDS MySQL库中表的权限。 |
connection-password | connection-user对应的密码。 |
配置多个MySQL服务
如果您有多个MySQL服务,可以在etc/catalog下创建对应数量且不重名的配置文件,确保文件后缀为.properties格式即可。例如,创建的配置文件名称为sales.properties,Presto会使用该文件配置的连接器创建一个名为sales的Catalog。
配置示例
在EMR集群中,如果需要配置多个MySQL服务,可以使用connector[x].properties添加自定义配置项来配置MySQL服务,其中N 为1、2、3……。详细信息请参见以下步骤:
- 在EMR控制台的Presto服务的配置页面,在服务配置区域的mysql.properties页签中,修改配置connection-user、connection-password和connection-url。
您可以单击上方的新增配置项,添加您需要的配置项,详情请参见添加配置项。
- 保存配置。
- 在服务配置,单击保存。
- 在弹出的对话框中,输入执行原因,单击保存。
- 重启服务。
- 在右上角选择 。
- 在弹出的对话框中,输入执行原因,单击确定。
- 在确认对话框中,单击确定。
类型映射
DECIMAL类型处理
精度超过38位的DECIMAL类型可以通过设定配置项decimal_mapping或将decimal_mapping的Session属性设为allow_overflow来映射到Presto的DECIMAL。 结果类型的范围由配置项decimal-default-scale或decimal-rounding-mode控制,其精度恒定为38。
默认情况下,需舍入或截断才能匹配的值在运行时会执行失败。这一行为由配置项decimal-rounding-mode或decimal-rounding-mode的Session属性控制,其值可设为UNNECESSARY(默认值)、UP、DOWN、CEILING、FLOOR、HALF_UP、HALF_DOWN或HALF_EVEN。
通用配置属性
通过配置下列属性,可以将来自数据源的数据类型映射到Presto的数据类型,以及可以在Presto中缓存元数据。
属性 | 描述 |
---|---|
unsupported-type-handling | 配置如何处理不支持的数据列类型。取值如下:
|
jdbc-types-mapped-to-varchar | 允许以逗号(,)分隔的列表的数据类型映射强制转换为无界VARCHAR。 |
case-insensitive-name-matching | 数据库和集合名称是否区分大小写。取值如下:
|
case-insensitive-name-matching.cache-ttl | 不区分大小写的数据库和集合名称的缓存时间。 默认值为1,单位分钟。 |
metadata.cache-ttl | 缓存包括表和列统计信息在内的元数据的持续时间。 默认值0表示禁止缓存。 |
metadata.cache-missing | 是否缓存包括表和列统计信息在内的元数据的状态。取值如下:
|
示例:查询MySQL
- 查看RDS的数据库。
- 查询表数据。
- 查询mysql.web.clicks表的数据。
select * from mysql.web.clicks
- 查询mysql.web.clicks表的列信息。
或者使用以下命令查询表的列信息。show columns from mysql.web.clicks;
describe mysql.web.clicks;
- 查询mysql.web.clicks表的数据。
下推(Pushdown)
Pushdown详细信息,请参见Presto官网文档Pushdown。
MySQL连接器支持下推的算子和函数情况如下:
- 算子
- Join
- Limit
- Top-N
- 函数
- avg()
- count()
- max()
- min()
- sum()
- stddev()
- stddev_pop()
- stddev_samp()
- variance()
- var_pop()
- var_samp()