DLA实现跨地域、跨实例的多AnalyticDB读写访问
實時數據倉庫ADB(AnalyticDB)云產品:https://www.aliyun.com/produc...
數據湖分析服務DLA(Data Lake Analytics)云產品:https://www.aliyun.com/produc...
數據湖分析DLA簡介:https://yq.aliyun.com/article...
DLA作為數據湖數據分析場景中的中樞,能夠對云上眾多數據存儲、數據庫等系統進行融合數據分析,為用戶提供統一操作視角,打通系統邊界,對分析結果進行回流。
目前已經支持的數據存儲、數據庫系統包括:
數據系統 源(查詢) 目標(數據回流)
OSS 支持 支持
Table Store 支持 支持
AnalyticDB 支持 支持
RDS for MySQL 支持 支持
用戶自建MySQL 支持 支持
RDS for PostgreSQL 支持 支持
用戶自建PostgreSQL 支持 支持
RDS for SQL Server 支持 支持
用戶自建SQL Server 支持 支持
云數據庫Redis 支持 暫不支持
用戶自建Redis 支持 暫不支持
云數據庫MongoDB 支持 暫不支持
用戶自建MongoDB 支持 暫不支持
PolarDB 支持 支持
通過彈性網絡技術,目前DLA支持了跨地域(region)的數據訪問能力,上述的多個數據源同時通過DLA也具備了跨多個地域的融合分析能力,能夠幫助用戶實現多云(Multicloud: https://en.wikipedia.org/wiki...)場景下的數據融合分析。
本文重點介紹通過DLA實現跨地域、跨實例的多AnalyticDB讀寫訪問。涉及的網絡結構如下圖所示,假設用戶使用的DLA服務位于上海region。
ADB中的數據
假設ADB的兩個實例中,都已經存在如下兩張表,對應ADB的DDL為:
CREATE TABLE customer (
c_custkey int COMMENT '',
c_name varchar COMMENT '',
c_address varchar COMMENT '',
c_nationkey int COMMENT '',
c_phone varchar COMMENT '',
c_acctbal double COMMENT '',
c_mktsegment varchar COMMENT '',
c_comment varchar COMMENT '',
PRIMARY KEY (C_CUSTKEY,C_NATIONKEY)
)
PARTITION BY HASH KEY (C_CUSTKEY) PARTITION NUM 32
TABLEGROUP tpch_50x_group
OPTIONS (UPDATETYPE='realtime')
COMMENT '';
CREATE DIMENSION TABLE nation (
n_nationkey int COMMENT '',
n_name varchar COMMENT '',
n_regionkey int COMMENT '',
n_comment varchar COMMENT '',
PRIMARY KEY (N_NATIONKEY)
)
OPTIONS (UPDATETYPE='realtime')
COMMENT '';
其中customer表有7,500,000條數據,nation表有25條數據。
DLA映射北京region的ADB實例
由于使用的是上海region的DLA服務,所以,需要通過公網訪問該北京region的ADB實例的經典網絡地址:ads-dla-test-f508cb23.cn-beijing-1.ads.aliyuncs.com:10006(跨region訪問不能走VPC,網絡不通)
連接上海region的DLA服務,執行如下建庫和建表命令,映射指向北京region ADB實例和customer表。
CREATE DATABASE beijing_public_ads_dla_test
WITH DBPROPERTIES (
)
COMMENT '';
CREATE EXTERNAL TABLE IF NOT EXISTS customer (
`c_custkey` INT NULL COMMENT '', `c_name` STRING NULL COMMENT '', `c_address` STRING NULL COMMENT '', `c_nationkey` INT NULL COMMENT '', `c_phone` STRING NULL COMMENT '', `c_acctbal` DOUBLE NULL COMMENT '', `c_mktsegment` STRING NULL COMMENT '', `c_comment` STRING NULL COMMENT '');
CREATE EXTERNAL TABLE IF NOT EXISTS nation (
n_nationkey int COMMENT '',
n_name varchar COMMENT '',
n_regionkey int COMMENT '',
n_comment varchar COMMENT ''
);
DLA映射上海region的ADB實例
由于使用的是上海region的DLA服務,所以,可以通過VPC網絡地址訪問同上海region的ADB實例:dla-data-4d5443bf-vpc.cn-shanghai-1.ads.aliyuncs.com:10001
注意:為ADB生成的VPC URL必須是為
連接上海region的DLA服務,執行如下建庫和建表命令,映射指向上海region ADB實例和customer表。
CREATE DATABASE shanghai_vpc_dla_data
WITH DBPROPERTIES (
)
COMMENT '';
CREATE EXTERNAL TABLE IF NOT EXISTS customer (
c_custkey INT NULL COMMENT '',
c_name STRING NULL COMMENT '',
c_address STRING NULL COMMENT '',
c_nationkey INT NULL COMMENT '',
c_phone STRING NULL COMMENT '',
c_acctbal DOUBLE NULL COMMENT '',
c_mktsegment STRING NULL COMMENT '',
c_comment STRING NULL COMMENT ''
);
CREATE EXTERNAL TABLE IF NOT EXISTS nation (
n_nationkey int COMMENT '',
n_name varchar COMMENT '',
n_regionkey int COMMENT '',
n_comment varchar COMMENT ''
);
查詢
如下是按照國家統計客戶的數量的查詢示例,由于上述兩個ADB實例中的兩張表的數據相同,所以通過DLA查詢,下面四個查詢的結果是相同的。查詢是通過上海region的DLA執行的:
查詢1:北京region ADB的customer表join北京region ADB的nation表;
SELECT a.c_nationkey, b.n_name, count(*) as cnt
FROM beijing_public_ads_dla_test.customer a
JOIN beijing_public_ads_dla_test.nation b ON a.c_nationkey = b.n_nationkey
GROUP BY a.c_nationkey, b.n_name
ORDER BY cnt DESC;
查詢2:上海region ADB的customer表join上海region ADB的nation表;
SELECT a.c_nationkey, b.n_name, count(*) as cnt
FROM shanghai_vpc_dla_data.customer a
JOIN shanghai_vpc_dla_data.nation b ON a.c_nationkey = b.n_nationkey
GROUP BY a.c_nationkey, b.n_name
ORDER BY cnt DESC;
查詢3:上海region ADB的customer表join北京region ADB的nation表;
SELECT a.c_nationkey, b.n_name, count(*) as cnt
FROM shanghai_vpc_dla_data.customer a
JOIN beijing_public_ads_dla_test.nation b ON a.c_nationkey = b.n_nationkey
GROUP BY a.c_nationkey, b.n_name
ORDER BY cnt DESC;
查詢4:北京region ADB的customer表join上海region ADB的nation表;
SELECT a.c_nationkey, b.n_name, count(*) as cnt
FROM beijing_public_ads_dla_test.customer a
JOIN shanghai_vpc_dla_data.nation b ON a.c_nationkey = b.n_nationkey
GROUP BY a.c_nationkey, b.n_name
ORDER BY cnt DESC;
寫入
通過DLA執行INSERT from SELECT,將其他數據源的查詢結果寫入ADB數據源中。
在DLA中執行如下語句,指向上海region的OSS bucket建庫、建表:
CREATE DATABASE tpch_50x_text
WITH DBPROPERTIES (
)
COMMENT '';
CREATE EXTERNAL TABLE tpch_50x_text.nation (
`n_nationkey` int, `n_name` string, `n_regionkey` int, `n_comment` string)
ROW FORMAT DELIMITED
STORED AS TEXTFILE
LOCATION 'oss://oss-**/datasets/tpch/50x/text_date/nation_text';
更多關于DLA對OSS的數據查詢,請參考:
https://yq.aliyun.com/article... (教程:使用Data Lake Analytics + OSS分析CSV格式的TPC-H數據集)
https://yq.aliyun.com/article... (教程:Data Lake Analytics + OSS數據文件格式處理大全)
https://yq.aliyun.com/article... (Data Lake Analytics中OSS LOCATION的使用說明)
https://yq.aliyun.com/article... (教程:如何使用Data Lake Analytics創建分區表)
https://yq.aliyun.com/article... (使用Data Lake Analytics快速分析OSS上的日志文件)
https://yq.aliyun.com/article... (教程:如何通過DLA實現數據文件格式轉換)
如下示例場景:
通過上海region DLA服務,將上海region的OSS bucket數據寫入上海region的ADB中:
INSERT INTO shanghai_vpc_dla_data.nation
SELECT * FROM tpch_50x_text.nation;
通過上海region DLA服務,將上海region的OSS bucket數據寫入北京region的ADB中:(由于需要跨region的公網訪問,建議該模式下數據量不要太大)
INSERT INTO beijing_public_ads_dla_test.nation
SELECT * FROM tpch_50x_text.nation;
通過上海region DLA服務,將上海region的ADB數據寫入北京region的ADB中:(由于需要跨region的公網訪問,建議該模式下數據量不要太大)
INSERT INTO beijing_public_ads_dla_test.nation
SELECT * FROM shanghai_vpc_dla_data.nation;
通過上海region DLA服務,將北京region的ADB數據寫入上海region的ADB中:(由于需要跨region的公網訪問,建議該模式下數據量不要太大)
INSERT INTO shanghai_vpc_dla_data.nation
SELECT * FROM beijing_public_ads_dla_test.nation;
本文作者:julian.zhou
閱讀原文
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的DLA实现跨地域、跨实例的多AnalyticDB读写访问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql server(常用)
- 下一篇: 解决git bash闪退问题