本文檔將以兩個云數據庫RDS MySQL 版(簡稱MySQL)為例,介紹如何通過DLA聯合查詢多個MySQL實例數據。
背景信息
Data Lake Analytics(簡稱DLA) 作為云上數據處理的樞紐,支持通過標準JDBC對單個實例RDS、Table Store、OSS、MongoDB中的數據進行查詢和分析。隨著業務的擴展或者數據的劃分,您可能會創建多個RDS、Table Store、OSS等實例存儲數據。在這種多數據源場景下,仍然可以通過DLA實現多個相同類型數據源的聯合查詢。
前提條件
通過DLA聯合查詢兩個MySQL實例數據前,您需要通過以下操作在兩個MySQL實例中準備好測試數據
DLA和兩個MySQL所屬地域必須相同,否則無法進行本文檔操作。
由于DLA將通過MySQL的VPC連接MySQL數據庫,建議您創建MySQL實例時,網絡類型選擇VPC。同時,MySQL支持通過切換為專有網絡將經典網絡切換為VPC。
寫入測試數據
MySQL實例1中創建orders_db數據庫和order_item表,寫入測試數據:
create table orders_db.order_item ( id bigint not null primary key auto_increment, prod_id bigint comment '商品ID', prod_cnt int comment '商品數量' ); insert into orders_db.order_item values (1, 1, 2), (2, 2, 3), (3, 3, 4), (4, 2, 5), (5, 1, 6);
MySQL實例2中創建prod_db數據庫和prod表,寫入測試數據:
create table prod_db.prod ( id bigint not null primary key auto_increment, prod_name varchar(31) comment '商品名稱' ); insert into prod_db.prod values (1, '鍵盤'), (2, '鼠標'), (3, '顯示器');
實施步驟
注意事項
在DLA中創建MySQL數據庫連接前,需要將IP地址段100.104.0.0/16
分別加入到MySQL白名單列表中。
由于您的MySQL實例位于VPC內,默認情況下DLA無法訪問該VPC中的資源。為了讓DLA訪問MySQL,需要利用VPC反向訪問技術,即在MySQL白名單中添加100.104.0.0/16
IP地址段。
權限聲明:當您在MySQL白名單中添加了100.104.0.0/16
IP地址段,即視為您同意我們利用VPC反向訪問技術讀取MySQL數據庫數據。
步驟一:在DLA中創建MySQL數據庫連接
登錄DLA控制臺,單擊左側導航欄的SQL訪問點,單擊登錄到DMS,分別在DLA中創建兩個底層映射到MySQL的數據庫連接。
CREATE SCHEMA dla_orders_db WITH DBPROPERTIES (
CATALOG = 'mysql',
LOCATION = 'jdbc:mysql://rm-******.mysql.rds.aliyuncs.com:3306/orders_db',
USER = 'mysql_db_user_name',
PASSWORD = 'mysql_db_password',
VPC_ID = 'mysql_vpc_id',
INSTANCE_ID = 'mysql_instance_id'
);
CREATE SCHEMA dla_prod_db WITH DBPROPERTIES (
CATALOG = 'mysql',
LOCATION = 'jdbc:mysql://rm-******.mysql.rds.aliyuncs.com:3306/prod_db',
USER = 'mysql_db_user_name',
PASSWORD = 'mysql_db_password',
VPC_ID = 'mysql_vpc_id',
INSTANCE_ID = 'mysql_instance_id'
);
參數說明
LOCATION:由
jdbc:mysql://MySQL內網連接地址:端口號/MySQL數據庫名
構成。USER:連接MySQL數據庫所使用的用戶名。
PASSWORD:連接MySQL數據庫所使用的用戶名對應的密碼。
VPC_ID:MySQL實例所屬VPC ID。
INSTANCE_ID:MySQL實例ID。
步驟二:在DLA中創建MySQL外表
針對MySQL中order_item表,本示例在DMS for Data Lake Analytics中創建同名外表order_item:
create external table order_item (
id bigint,
prod_id bigint,
prod_cnt int,
);
針對MySQL中prod表,本示例在DMS for Data Lake Analytics中創建同名外表prod:
create external table prod (
id bigint,
prod_name varchar(31)
);
步驟三:通過DLA聯合查詢多個MySQL實例數據
MySQL數據庫連接和外表創建成功后,接下來您可以通過MySQL客戶端或者MySQL命令行工具連接DLA,使用標準SQL語句操作MySQL數據庫數據。
也可以直接在DMS for Data Lake Analytics中操作MySQL數據庫數據。
以下示例通過MySQL命令行工具連接DLA,聯合查詢order_item表和prod表數據:
mysql> select * from dla_orders_db.order_item;
+------+---------+----------+
| id | prod_id | prod_cnt |
+------+---------+----------+
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 2 | 5 |
| 5 | 1 | 6 |
+------+---------+----------+
5 rows in set (0.22 sec)
mysql> select * from dla_prod_db.prod;
+------+-----------+
| id | prod_name |
+------+-----------+
| 1 | 鍵盤 |
| 2 | 鼠標 |
| 3 | 顯示器 |
+------+-----------+
3 rows in set (0.18 sec)
select p.prod_name, sum(o.prod_cnt) cnt
from dla_prod_db.prod p inner join dla_orders_db.order_item o
on p.id = o.prod_id
group by p.prod_name
order by cnt desc;
+------+-----------+
| prod_name | cnt |
+-----------+------+
| 鍵盤 | 8 |
| 鼠標 | 8 |
| 顯示器 | 4 |
+-----------+------+
3 rows in set (0.55 sec)
后續操作
我們通過DLA聯合查詢多個MySQL實例數據后,可以通過DLA將查詢到的數據存入阿里云對象存儲服務(Object Storage Service,簡稱 OSS)。OSS是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。后續需要這部分數據時,DLA可以在不移動OSS文件的情況下,直接讀取數據。