AnalyticDB for MySQL企业版、基础版及湖仓版支持通过XIHE SQL和Spark SQL访问OSS数据。本文以基金交易数据处理为例,介绍通过XIHE SQL和Spark SQL访问OSS数据的具体步骤。
前提条件
集群的产品系列为企业版、基础版或湖仓版。
已在AnalyticDB for MySQL集群中创建Job型资源组。具体操作,请参见新建资源组。
已创建AnalyticDB for MySQL集群的数据库账号。
如果是通过阿里云账号访问,只需创建高权限账号。具体操作,请参见创建高权限账号。
如果是通过RAM用户访问,需要创建高权限账号和普通账号并且将RAM用户绑定到普通账号上。具体操作,请参见创建数据库账号和绑定或解绑RAM用户与数据库账号。
已授权AnalyticDB for MySQL扮演AliyunADBSparkProcessingDataRole角色来访问其他云资源。具体操作,请参见账号授权。
操作步骤
准备数据。
访问数据。
通过XIHE SQL访问OSS数据
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在企业版、基础版或湖仓版页签下,单击目标集群ID。
在左侧导航栏,单击作业开发>SQL开发。
在SQLConsole窗口,选择Job型资源组和XIHE引擎。
创建数据库。如果有已创建的数据库,可以忽略本步骤。示例如下:
CREATE DATABASE adb_demo;
创建OSS外表。
创建交易信息表
创建用户信息表
查询外表数据。
您可以选择通过同步执行或异步执行查询数据,同步执行的结果会直接显示,异步执行会返回job_id,您可以通过job_id查询异步任务状态,判断任务是否执行成功。
同步查询
示例一:查询交易机构SXS_0010,在0603至0604的100条交易记录。
SELECT * FROM tradelist_csv WHERE t_cdate >= '2018-06-03' and t_cdate <= '2018-06-04' and t_agencyno = 'SXS_0010' limit 100;
返回结果:
+-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+ | t_userid | t_dealdate | t_businflag | t_cdate | t_date | t_serialno | t_agencyno | t_netno | +-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+ | 00041972 | 2018-06-03 09:11:57 | 保本基金B | 2018-06-03 | 2018-06-03 | 2018-06-03-000846 | SXS_0010S | STORE-0135 | +-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+ | 00051912 | 2018-06-03 09:28:20 | 保本基金D | 2018-06-03 | 2018-06-03 | 2018-06-03-001046 | SXS_0010S | STORE-0397 | +-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+ | 00120370 | 2018-06-03 11:21:39 | 保本基金B | 2018-06-03 | 2018-06-03 | 2018-06-03-002393 | SXS_0010S | STORE-0800 | +-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+ | 00165308 | 2018-06-03 12:35:35 | 保本基金D | 2018-06-03 | 2018-06-03 | 2018-06-03-003281 | SXS_0010S | STORE-0340 | +-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+
说明本示例为部分返回结果,实际结果请以控制台为准。
示例二:查询各城市、男性女性人群,购买的基金总额(多表Join查询)。
SELECT u_city, u_gender, SUM(t_confirmbalance) AS sum_balance FROM tradelist_csv , userinfo WHERE u_userid = t_userid GROUP BY u_city, u_gender ORDER BY sum_balance DESC;
返回结果:
+-----------+------------+----------------+ | u_city | u_gender | sum_balance | +-----------+------------+----------------+ | Beijing | male | 2445539161 | +-----------+------------+----------------+ | Guangzhou | male | 1271999857 | +-----------+------------+----------------+ | Qingdao | male | 1266748660 | +-----------+------------+----------------+ | Wuhan | male | 12641688475 | +-----------+------------+----------------+
说明本示例为部分返回结果,实际结果请以控制台为准。
异步查询
查询各城市、男性女性人群,购买的基金总额(多表Join查询)。
SUBMIT JOB SELECT u_city, u_gender, SUM(t_confirmbalance) AS sum_balance FROM tradelist_csv , userinfo WHERE u_userid = t_userid GROUP BY u_city, u_gender ORDER BY sum_balance DESC;
返回结果:
+---------------------------------------+ | job_id | +---------------------------------------+ | 2023091410365702101701713803151****** | +---------------------------------------+
使用
SUBMIT JOB
提交异步任务后,您可以通过job_id终止异步任务或查询异步任务状态,具体操作,请参见异步提交任务。
通过Spark SQL访问OSS数据
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在企业版、基础版或湖仓版页签下,单击目标集群ID。
在左侧导航栏,单击作业开发>SQL开发。
在SQLConsole窗口,选择Job型资源组和Spark引擎。
创建数据库。如果有已创建的数据库,可以忽略本步骤。示例如下:
CREATE DATABASE adb_test;
创建OSS外表。
创建交易信息表
创建用户信息表
查询数据。
说明执行Spark SQL语句,只返回执行成功或者失败,不返回查询结果。您可以在Spark Jar开发页面应用列表页签中的日志查看查询结果。详情请参见查看Spark应用信息。
示例一:查询交易机构SXS_0010,在0603至0604的100条交易记录。
SELECT * FROM adb_test.tradelist_csv WHERE t_cdate >= '2018-06-03' and t_cdate <= '2018-06-04' and t_agencyno = 'SXS_0010' LIMIT 100;
示例二:查询各城市、男性女性人群,购买的基金总额(多表Join查询)。
SELECT u_city, u_gender, SUM(t_confirmbalance) AS sum_balance FROM adb_test.tradelist_csv , adb_test.userinfo WHERE u_userid = t_userid GROUP BY u_city, u_gender ORDER BY sum_balance DESC;