Athena 联合查询 RDS Mysql 数据库

Athena 联合查询支持多达 34 种不同数据源,并且支持自定义数据源连接器,以无服务器的交互方式实现跨数据源的查询,无需移动底层数据源即可进行数据分析。Athena 基于 Trino SQL 查询,语法和 Hive SQL/Mysql 差别不大,个别函数需要调整。本教程演示 Athena 联合查询两个 RDS Mysql 数据库实例,配置简单,您有更多精力关注数据本身价值。

Amazon Athena
Amazon Lambda
Amazon RDS for MySQL
Amazon S3
Amazon EC2
数据分析
教程
亚马逊云科技
Olawale Olaleye
难度
200 - 中级
时间
15 分钟
费用

- 以美东 1(弗吉尼亚北部)为例,如果部署 Lambda Connector 和 Athena 查询,将根据查询 SQL 的次数和消耗的计算资源收费,本次教程预计不会超过 1USD,此费用不包括开启的两个 RDS Mysql 数据库测试实例的费用,不包括初始化数据库时安装 Mysql 命令的 EC2 实例费用,请在教程结束后删除 Lambda Connector,关闭测试的 RDS Mysql 实例,关闭 EC2 实例。

- Lambda 有免费套餐配额

受众

运维、数据分析工程师、业务开发人员

前提条件

- 海外区域: 注册 / 登录 亚马逊云科技
- 中国区域: 注册 / 登录 亚马逊云科技

- EC2 t3.micro 安装Mysql客户端
- 创建两个RDS Mysql 数据库实例

上次更新时间
2024 年 5 月 15 日
相关行业

通用

第一步

本次实验使用 Athena 查询两个不同的 RDS Mysql 数据库实例,实现跨数据库 join 查询。实验开始之前,请先准备前提条件:

创建两个 RDS Mysql 数据库实例:database1 和 database2;

启动一台 EC2 t3.micro, 安装 Mysql 客户端,下载 example world database 并修改 sql,连接 RDS 数据库,通过 source /home/ec2-user/world-db/world.sql 初始化三个数据库:database1 实例初始化两个数据库 test1,test2,database2 实例初始化数据库 test3;

第二步

打开控制台 Athena 服务,创建数据源:

输入数据源名称,比如 database1 和 database2,分别对应两个 RDS 数据库实例。第一次需要点击创建 Lambda 函数,第二次创建 database2 数据源时可以选择已创建好的 Lambda 函数。

创建 Lambda 函数:

  • SecretNamePrefix:用于在 Secrets Manager Key 保存 RDS Mysql 连接的用户名密码,本次实验将用户名密码放在 ConnectionString 中,所以可以随意自定义 Key
  • SpillBucket:当 Lambda 查询数据溢出时保存到 S3,指定一个已有的 S3 Bucket
  • DefaultConnectionString:数据库连接串,固定的格式:mysql://jdbc:mysql://<host>:3306/?user=<user>&password=<pwd>。注意这个 Default 连接串并不是给 database1 和 database2 连接使用,我们需要在后续步骤中 Lambda 环境变量中额外配置。
  • LambdaFunctionName:自定义
  • SecurityGroupIds 和 SubnetIds:请选择 RDS Mysql 的安全组和子网 id,Lambda 将使用和 Mysql 相同的 VPC 网络环境。

根据函数名字找到并打开部署好的 Lambda 函数,并配置环境变量,增加 database1 和 database2 的连接串,Athena 的两个数据源将共用同一个 Lambda 函数:

创建 Athena 数据源,选择 Lambda 函数:

第三步

打开 Athena 查询编辑器,join 两个数据库实例进行查询:

同时可以尝试其他 join 查询,比如 database1 数据源中的两个不同数据库 test1,test2:

总结

Athena 无服务器的查询方式,特别适合 Ad-hoc 或应用程序调用查询,联合查询无需移动底层数据源,支持跨多种数据源运行查询,只需简单的三步即可完成查询。