阿里云云栖社区

“云栖社区”是阿里云官方开发者技术社区,聚焦于传播云计算、大数据等DT时代核心技术的内容与资源。...

DLA实现跨地域、跨实例的多AnalyticDB读写访问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yunqiinsight/article/details/87190159

1. 介绍

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/Multicloud)场景下的数据融合分析。

本文重点介绍通过DLA实现跨地域、跨实例的多AnalyticDB读写访问。涉及的网络结构如下图所示,假设用户使用的DLA服务位于上海region。

2. 场景示例

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 (
    catalog = 'ads',
    location = 'jdbc:mysql://ads-dla-test-f508cb23.cn-beijing-1.ads.aliyuncs.com:10006/ads_dla_test',
    instance = 'ads_dla_test',
    user = 'L*T',
    password = '****'
)
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 (
    catalog = 'ads',
    location = 'jdbc:mysql://dla-data-4d5443bf-vpc.cn-shanghai-1.ads.aliyuncs.com:10001/dla_data',
    instance = 'dla_data',
    user = 'L*M',
    password = '****'
)
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 (
    catalog = 'oss',
    location = 'oss://oss-****/datasets/tpch/50x/text_date/'
)
COMMENT '';

CREATE EXTERNAL TABLE `tpch_50x_text`.`nation` (
    `n_nationkey` int,
    `n_name` string,
    `n_regionkey` int,
    `n_comment` string
)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '|'
STORED AS `TEXTFILE`
LOCATION 'oss://oss-****/datasets/tpch/50x/text_date/nation_text';

更多关于DLA对OSS的数据查询,请参考:
https://yq.aliyun.com/articles/623282 (教程:使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集)
https://yq.aliyun.com/articles/623246 (教程:Data Lake Analytics + OSS数据文件格式处理大全)
https://yq.aliyun.com/articles/623247 (Data Lake Analytics中OSS LOCATION的使用说明)
https://yq.aliyun.com/articles/624151 (教程:如何使用Data Lake Analytics创建分区表)
https://yq.aliyun.com/articles/679405 (使用Data Lake Analytics快速分析OSS上的日志文件)
https://yq.aliyun.com/articles/672475 (教程:如何通过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;

 


原文链接
本文为云栖社区原创内容,未经允许不得转载。

没有更多推荐了,返回首页