通過XIHE SQL或者Spark SQL訪問OSS數(shù)據(jù)
AnalyticDB for MySQL企業(yè)版、基礎(chǔ)版及湖倉版支持通過XIHE SQL和Spark SQL訪問OSS數(shù)據(jù)。本文以基金交易數(shù)據(jù)處理為例,介紹通過XIHE SQL和Spark SQL訪問OSS數(shù)據(jù)的具體步驟。
前提條件
已開通OSS服務(wù)并創(chuàng)建存儲空間和目錄。具體操作,請參見開通OSS服務(wù)、創(chuàng)建存儲空間和創(chuàng)建目錄。
集群的產(chǎn)品系列為企業(yè)版、基礎(chǔ)版或湖倉版。
已在AnalyticDB for MySQL集群中創(chuàng)建Job型資源組。具體操作,請參見新建資源組。
已創(chuàng)建AnalyticDB for MySQL集群的數(shù)據(jù)庫賬號。
如果是通過阿里云賬號訪問,只需創(chuàng)建高權(quán)限賬號。具體操作,請參見創(chuàng)建高權(quán)限賬號。
如果是通過RAM用戶訪問,需要創(chuàng)建高權(quán)限賬號和普通賬號并且將RAM用戶綁定到普通賬號上。具體操作,請參見創(chuàng)建數(shù)據(jù)庫賬號和綁定或解綁RAM用戶與數(shù)據(jù)庫賬號。
已授權(quán)AnalyticDB for MySQL扮演AliyunADBSparkProcessingDataRole角色來訪問其他云資源。具體操作,請參見賬號授權(quán)。
操作步驟
準備數(shù)據(jù)。
下載模擬數(shù)據(jù)并解壓。
將模擬數(shù)據(jù)中的交易信息表和用戶數(shù)據(jù)表分別上傳至OSS中的
<bucketname>/adb/trade/
和<bucketname>/adb/user/
目錄。具體操作,請參見上傳文件。說明模擬數(shù)據(jù)中,交易信息表的表名以
dc_trade_final_dd
開頭,用戶數(shù)據(jù)表的表名為user_info
。您需將
<bucketname>
替換為實際的Bucket名稱。
訪問數(shù)據(jù)。
通過XIHE SQL訪問OSS數(shù)據(jù)
登錄云原生數(shù)據(jù)倉庫AnalyticDB MySQL控制臺,在左上角選擇集群所在地域。在左側(cè)導航欄,單擊集群列表,在企業(yè)版、基礎(chǔ)版或湖倉版頁簽下,單擊目標集群ID。
在左側(cè)導航欄,單擊作業(yè)開發(fā)>SQL開發(fā)。
在SQLConsole窗口,選擇Job型資源組和XIHE引擎。
創(chuàng)建數(shù)據(jù)庫。如果有已創(chuàng)建的數(shù)據(jù)庫,可以忽略本步驟。示例如下:
CREATE DATABASE adb_demo;
創(chuàng)建OSS外表。
創(chuàng)建交易信息表
CREATE EXTERNAL TABLE tradelist_csv ( t_userid STRING COMMENT '用戶ID', t_dealdate STRING COMMENT '申請時間', t_businflag STRING COMMENT '業(yè)務(wù)代碼', t_cdate STRING COMMENT '確認日期', t_date STRING COMMENT '申請日期', t_serialno STRING COMMENT'申請序號', t_agencyno STRING COMMENT'銷售商編號', t_netno STRING COMMENT'網(wǎng)點編號', t_fundacco STRING COMMENT'基金賬號', t_tradeacco STRING COMMENT'交易賬號', t_fundcode STRING COMMENT'基金代碼', t_sharetype STRING COMMENT'份額類別', t_confirmbalance DOUBLE COMMENT'確認金額', t_tradefare DOUBLE COMMENT'交易費', t_backfare DOUBLE COMMENT'后收手續(xù)費', t_otherfare1 DOUBLE COMMENT'其他費用1', t_remark STRING COMMENT'備注' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFIlE LOCATION 'oss://<bucketname>/adb/trade/';
語法說明,請參見OSS外表。其中,LOCATION為交易信息表所在的OSS路徑。
創(chuàng)建用戶信息表
CREATE EXTERNAL TABLE userinfo ( u_userid STRING COMMENT '用戶ID', u_accountdate STRING COMMENT '開戶時間', u_gender STRING COMMENT '性別', u_age INT COMMENT '年齡', u_risk_tolerance INT COMMENT '風險承受能力,1-10,10為最高級', u_city STRING COMMENT'所在城市', u_job STRING COMMENT'工作類別, A-K', u_income DOUBLE COMMENT'年收入(萬)' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFIlE LOCATION 'oss://<bucketname>/adb/user/';
語法說明,請參見OSS外表。其中,LOCATION為用戶信息表所在的OSS路徑。
查詢外表數(shù)據(jù)。
您可以選擇通過同步執(zhí)行或異步執(zhí)行查詢數(shù)據(jù),同步執(zhí)行的結(jié)果會直接顯示,異步執(zhí)行會返回job_id,您可以通過job_id查詢異步任務(wù)狀態(tài),判斷任務(wù)是否執(zhí)行成功。
同步查詢
示例一:查詢交易機構(gòu)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;
返回結(jié)果:
+-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+ | t_userid | t_dealdate | t_businflag | t_cdate | t_date | t_serialno | t_agencyno | t_netno | +-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+ | 00041972 | 2018-06-03 09:11:57 | 保本基金B(yǎng) | 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(yǎng) | 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 | +-----------+---------------------+---------------+--------------+--------------+-------------------+--------------+------------+
說明本示例為部分返回結(jié)果,實際結(jié)果請以控制臺為準。
示例二:查詢各城市、男性女性人群,購買的基金總額(多表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;
返回結(jié)果:
+-----------+------------+----------------+ | u_city | u_gender | sum_balance | +-----------+------------+----------------+ | Beijing | male | 2445539161 | +-----------+------------+----------------+ | Guangzhou | male | 1271999857 | +-----------+------------+----------------+ | Qingdao | male | 1266748660 | +-----------+------------+----------------+ | Wuhan | male | 12641688475 | +-----------+------------+----------------+
說明本示例為部分返回結(jié)果,實際結(jié)果請以控制臺為準。
異步查詢
查詢各城市、男性女性人群,購買的基金總額(多表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;
返回結(jié)果:
+---------------------------------------+ | job_id | +---------------------------------------+ | 2023091410365702101701713803151****** | +---------------------------------------+
使用
SUBMIT JOB
提交異步任務(wù)后,您可以通過job_id終止異步任務(wù)或查詢異步任務(wù)狀態(tài),具體操作,請參見異步提交任務(wù)。
通過Spark SQL訪問OSS數(shù)據(jù)
登錄云原生數(shù)據(jù)倉庫AnalyticDB MySQL控制臺,在左上角選擇集群所在地域。在左側(cè)導航欄,單擊集群列表,在企業(yè)版、基礎(chǔ)版或湖倉版頁簽下,單擊目標集群ID。
在左側(cè)導航欄,單擊作業(yè)開發(fā)>SQL開發(fā)。
在SQLConsole窗口,選擇Job型資源組和Spark引擎。
創(chuàng)建數(shù)據(jù)庫。如果有已創(chuàng)建的數(shù)據(jù)庫,可以忽略本步驟。示例如下:
CREATE DATABASE adb_test;
創(chuàng)建OSS外表。
創(chuàng)建交易信息表
CREATE EXTERNAL TABLE adb_test.tradelist_csv ( t_userid STRING COMMENT '用戶ID', t_dealdate STRING COMMENT '申請時間', t_businflag STRING COMMENT '業(yè)務(wù)代碼', t_cdate STRING COMMENT '確認日期', t_date STRING COMMENT '申請日期', t_serialno STRING COMMENT'申請序號', t_agencyno STRING COMMENT'銷售商編號', t_netno STRING COMMENT'網(wǎng)點編號', t_fundacco STRING COMMENT'基金賬號', t_tradeacco STRING COMMENT'交易賬號', t_fundcode STRING COMMENT'基金代碼', t_sharetype STRING COMMENT'份額類別', t_confirmbalance DOUBLE COMMENT'確認金額', t_tradefare DOUBLE COMMENT'交易費', t_backfare DOUBLE COMMENT'后收手續(xù)費', t_otherfare1 DOUBLE COMMENT'其他費用1', t_remark STRING COMMENT'備注' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFIlE LOCATION 'oss://<bucketname>/adb/trade/';
語法說明,請參見OSS外表。其中,LOCATION為交易信息表所在的OSS路徑。
創(chuàng)建用戶信息表
CREATE EXTERNAL TABLE adb_test.userinfo ( u_userid STRING COMMENT '用戶ID', u_accountdate STRING COMMENT '開戶時間', u_gender STRING COMMENT '性別', u_age INT COMMENT '年齡', u_risk_tolerance INT COMMENT '風險承受能力,1-10,10為最高級', u_city STRING COMMENT'所在城市', u_job STRING COMMENT'工作類別, A-K', u_income DOUBLE COMMENT'年收入(萬)' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFIlE LOCATION 'oss://<bucketname>/adb/user/';
語法說明,請參見OSS外表。其中,LOCATION為用戶信息表所在的OSS路徑。
查詢數(shù)據(jù)。
說明執(zhí)行Spark SQL語句,只返回執(zhí)行成功或者失敗,不返回查詢結(jié)果。您可以在Spark Jar開發(fā)頁面應(yīng)用列表頁簽中的日志查看查詢結(jié)果。詳情請參見查看Spark應(yīng)用信息。
示例一:查詢交易機構(gòu)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;