文档

MySQL连接器

更新时间:

使用MySQL连接器能够让您在外部MySQL实例中查询和创建表。该连接器可以用于不同系统(例如,MySQL和Hive),或者两个不同MySQL实例间的数据进行JOIN操作。

背景信息

本文为您介绍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……。详细信息请参见以下步骤:

  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()