RDS(Relational Database Service)是阿里云用户主要使用的服务,需要通过内网域名访问。如果您需要通过MaxCompute将数据加载至RDS的表中,可参考该文档进行操作。本文为您介绍如何在外网或VPC网络环境下基于RDS数据源创建外部表并写入数据。
前提条件
已开通MaxCompute和云数据库RDS间的网络连接,详情请参见网络开通流程。
使用限制
- 只有华北2(北京)、华东2(上海)、华北3(张家口)、华东1(杭州)和华南1(深圳)地域支持通过服务映射或专有网络连接方案连接MaxCompute和云数据库RDS,仅这五个地域可以创建RDS数据源外部表,其他地域暂不支持。
- 暂不支持PrivateZone域名。
- 支持RDS MySQL5.x版本,暂不支持8.0版本。
- 当您需要向RDS外部表写入大量数据时,采用并行多进程写入方式,会小概率出现某个写入进程数据重写情况,导致数据重复。
- MaxCompute里建的RDS外部表,其中DECIMAL数据类型默认小数18位,不能修改,只能建成
decimal(38,18)
。如果小数位数比较少,可以在MaxCompute中建外部表时数据类型选择String,使用的时候再使用cast
函数强制转换。
语法说明
建表时,表名和列名大小写不敏感。在查询表或列名时,无需区分大小写,且不支持强制转换大小写。
--开启Hive兼容模式。
set odps.sql.hive.compatible = true;
--打开外部表VPC支持。
set odps.sql.external.net.vpc=true;
CREATE EXTERNAL TABLE <mcrdsexternal_table_name>(
<col_name1> <data_type>,
<col_name2> <data_type>,
......
)
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' --处理JDBC连接类数据源的Handler。
WITH SERDEPROPERTIES (
'odps.external.net.vpc'='true',
'odps.vpc.id'='<VPC ID>',
'odps.vpc.access.ips'='<realm_name:port>',
'odps.vpc.region'='<RegionID>'
)
location '<jdbc:mysql://realm_name:port/rds_database_name?useSSL=false&user=user_name&password=password_value@&table=rds_table_name>'
TBLPROPERTIES(
['odps.federation.jdbc.colmapping'='<col_name1:rdstable_colname1|select_alias1>[,<col_name2:rdstable_colname2|select_alias2>,...]',]
'mcfed.mapreduce.jdbc.input.query'='<select_sentence>'
)
;
- mcrdsexternal_table_name:必填。待创建外部表的名称。
- col_name:必填。外部表的列名称。
- data_type:必填。列的数据类型。
- WITH SERDEPROPERTIES:
- 'odps.external.net.vpc'='true':必填。表明外部表的数据源处于VPC网络。
- 'odps.vpc.id'='<VPC ID>':必填。VPC网络ID号。详情请参见获取RegionID及VPC ID。
- 'odps.vpc.access.ips'='<realm_name:port>':必填。RDS数据源外部表所属VPC域名(内网地址)及端口。查看内网地址及端口操作,请参见查看或修改内外网地址和端口。
- 'odps.vpc.region'='<RegionID>':必填。VPC网络所在的地域ID。详情请参见获取RegionID及VPC ID。
- jdbc:mysql://realm_name:port/rds_database_name?useSSL=false&user=user_name&password=password_value@&table=rds_table_name:必填。连接RDS数据源表的连接字符串。
- rds_database_name:RDS数据库名称。
- user_name:RDS数据库的账号。
- password_value:RDS数据库的密码。
- rds_table_name:RDS源表名称。
- TBLPROPERTIES:
- 'odps.federation.jdbc.colmapping'='<col_name1:rdstable_colname1|select_alias1>[,<col_name2:rdstable_colname2|select_alias2>,...]':可选。MaxCompute外部表与RDS数据源表列的映射关系,此处的映射列数,需要与MaxCompute外部表定义的列数保持一致。其中:rdstable_colname为RDS源表的列名(全部列映射),select_alias为给查询结果定义的列别名(指定列映射)。
- 'mcfed.mapreduce.jdbc.input.query'='<select_sentence>':必填。读取RDS数据源表数据。新建外部表的列名与RDS数据源表的列名及数据类型保持一致。
select_sentence
格式为select xx from rds_database_name.rds_table_name
。
使用RDS数据源创建MaxCompute的外部表并加载数据
使用RDS数据源创建MaxCompute外部表的步骤如下: