使用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-passwordconnection-user对应的密码。

配置多个MySQL服务

如果您有多个MySQL服务,可以在etc/catalog下创建对应数量且不重名的配置文件,确保文件后缀为.properties格式即可。例如,创建的配置文件名称为sales.properties,Presto会使用该文件配置的连接器创建一个名为sales的Catalog。

配置示例

在EMR集群中,如果需要配置多个MySQL服务,可以使用connector[x].properties添加自定义配置项来配置MySQL服务,其中N 为1、2、3……。详细信息请参见以下步骤:
  1. 在EMR控制台的Presto服务的配置页面,在服务配置区域的mysql.properties页签中,修改配置connection-userconnection-passwordconnection-url

    您可以单击上方的新增配置项,添加您需要的配置项,详情请参见添加配置项

  2. 保存配置。
    1. 服务配置,单击保存
    2. 在弹出的对话框中,输入执行原因,单击保存
  3. 重启服务。
    1. 在右上角选择更多操作 > 重启
    2. 在弹出的对话框中,输入执行原因,单击确定
    3. 确认对话框中,单击确定

类型映射

DECIMAL类型处理

精度超过38位的DECIMAL类型可以通过设定配置项decimal_mapping或将decimal_mapping的Session属性设为allow_overflow来映射到Presto的DECIMAL。 结果类型的范围由配置项decimal-default-scaledecimal-rounding-mode控制,其精度恒定为38。

默认情况下,需舍入或截断才能匹配的值在运行时会执行失败。这一行为由配置项decimal-rounding-modedecimal-rounding-mode的Session属性控制,其值可设为UNNECESSARY(默认值)、UP、DOWN、CEILING、FLOOR、HALF_UP、HALF_DOWN或HALF_EVEN。

通用配置属性

通过配置下列属性,可以将来自数据源的数据类型映射到Presto的数据类型,以及可以在Presto中缓存元数据。
属性描述
unsupported-type-handling配置如何处理不支持的数据列类型。取值如下:
  • IGNORE(默认值):列不可访问。
  • CONVERT_TO_VARCHAR:列被转换为无界的VARCHAR。
jdbc-types-mapped-to-varchar允许以逗号(,)分隔的列表的数据类型映射强制转换为无界VARCHAR。
case-insensitive-name-matching数据库和集合名称是否区分大小写。取值如下:
  • true:不区分大小写。
  • false(默认值):区分大小写。
case-insensitive-name-matching.cache-ttl不区分大小写的数据库和集合名称的缓存时间。

默认值为1,单位分钟。

metadata.cache-ttl缓存包括表和列统计信息在内的元数据的持续时间。

默认值0表示禁止缓存。

metadata.cache-missing是否缓存包括表和列统计信息在内的元数据的状态。取值如下:
  • true:缓存。
  • false(默认值):不缓存。

示例:查询MySQL

  1. 查看RDS的数据库。
    1. 通过SSH方式连接集群,详情请参见登录集群
    2. 执行如下命令,连接Presto客户端。
      • DataLake集群
        presto --server master-1-1:9090 --catalog iceberg --schema default
      • Hadoop集群或单独的Presto集群
        presto --server emr-header-1:9090 --catalog iceberg --schema default
    3. 执行如下命令,查看Schema。
      show schemas from mysql;
      说明 mysql为properties配置文件的名称。
    4. 执行如下命令,查看数据库。
      show tables from mysql.web;
      说明 本文示例中的web是您在MySQL上创建的数据库。
  2. 查询表数据。
    • 查询mysql.web.clicks表的数据。
      select * from mysql.web.clicks
    • 查询mysql.web.clicks表的列信息。
      show columns from mysql.web.clicks;
      或者使用以下命令查询表的列信息。
      describe 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()