
# 创建DLI表关联RDS
#### 功能描述
使用CREATE TABLE命令创建DLI表并关联RDS上已有的表。该功能支持访问RDS的MySQL集群和PostGre集群。
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
Spark跨源开发场景中直接配置跨源认证信息存在密码泄露的风险，优先推荐您使用DLI提供的跨源认证方式。
跨源认证简介及操作方法请参考[跨源认证简介](https://support.huaweicloud.com/usermanual-dli/dli_01_0561.html)。
#### 前提条件
创建DLI表关联RDS之前需要创建跨源连接。管理控制台操作请参考[增强型跨源连接](https://support.huaweicloud.com/usermanual-dli/dli_01_0426.html)。
#### 语法格式
```
CREATE TABLE [IF NOT EXISTS] TABLE_NAME
  USING JDBC OPTIONS (
  'url'='xx',
  'driver'='DRIVER_NAME',
  'dbtable'='db_name_in_RDS.table_name_in_RDS',
  'passwdauth' = 'xxx',
  'encryption' = 'true');
```
#### 关键字
表1CREATE TABLE关键字说明 
| **参数**          | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|
| url             | RDS的连接地址，需要先创建跨源连接，管理控制台操作请参考[增强型跨源连接](https://support.huaweicloud.com/usermanual-dli/dli_01_0426.html)。 创建经典型跨源连接后，使用经典型跨源连接中返回的连接地址。 创建增强型跨源连接后，使用RDS提供的"内网域名"或者内网地址和数据库端口访问，MySQL格式为"协议头://内网IP:内网端口"，PostGre格式为"协议头://内网IP:内网端口/数据库名"。 例如："jdbc:mysql://192.168.0.193:3306"或者"jdbc:postgresql://192.168.0.193:5432/postgres"。 说明： 经典型跨源的连接地址默认格式为："协议头://访问地址:访问端口" 例如：jdbc:mysql://to-rds-1174405119-oLRHAGE7.datasource.com:5432 如果想要访问RDS的postgre集群，需要将连接地址中的协议头修改为"jdbc:postgresql"，并在连接地址最后加上"/数据库名"。 例如：jdbc:postgresql://to-rds-1174405119-oLRHAGE7.datasource.com:5432/postgreDB |
| driver          | jdbc驱动类名，访问MySQL集群请填写："com.mysql.jdbc.Driver"，访问PostGre集群请填写："org.postgresql.Driver"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| dbtable         | - 访问MySQL集群填写"数据库名.表名" 注意： 连接的RDS数据库名不能包含中划线-或\^特殊字符，否则会创建表失败。   - 访问PostGre集群填写"模式名.表名" 说明： 模式名即为数据库模式（schema）的名称。数据库中schema是数据库对象集合，包含了表，视图等多种对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| user            | （已废弃）RDS用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| password        | （已废弃）RDS用户名密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| passwdauth      | 跨源密码认证名称。跨源认证信息创建方式请参考《数据湖探索用户指南》\>《[跨源认证](https://support.huaweicloud.com/usermanual-dli/dli_01_0561.html)》。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| encryption      | 使用跨源密码认证时配置为"true"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| partitionColumn | 读取数据时，用于设置并发使用的数值型字段。 说明： - "partitionColumn"、"lowerBound"、"upperBound"、"numPartitions"四个参数必须同时设置，不支持仅设置其中某一个或某几个。  - 为了提升并发读取的性能，建议使用自增列。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| lowerBound      | partitionColumn设置的字段数据最小值，该值包含在返回结果中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| upperBound      | partitionColumn设置的字段数据最大值，该值不包含在返回结果中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| numPartitions   | 读取数据时并发数。 说明： 实际读取数据时，会根据"lowerBound"与"upperBound"，平均分配给每个task，获取其中一部分的数据。例如： ``` 'partitionColumn'='id', 'lowerBound'='0', 'upperBound'='100', 'numPartitions'='2' ``` 表示在DLI中会起2个并发task，一个task执行id\>=0 and id \< 50，另一个task执行id \>=50 and id \< 100。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| fetchsize       | 读取数据时，每一批次获取数据的记录数，默认值1000。设置越大性能越好，但占用内存越多，该值设置过大会有内存溢出的风险。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| batchsize       | 写入数据时，每一批次写入数据的记录数，默认值1000。设置越大性能越好，但占用内存越多，该值设置过大会有内存溢出的风险。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| truncate        | 执行overwrite时是否不删除原表，直接执行清空表操作，取值范围： - true  - false   默认为"false"，即在执行overwrite操作时，先将原表删除再重新建表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| isolationLevel  | 事务隔离级别，取值范围： - NONE  - READ_UNCOMMITTED  - READ_COMMITTED  - REPEATABLE_READ  - SERIALIZABLE   默认值为"READ_UNCOMMITTED"。                                                                                                                                           |
   
#### 注意事项
在首次创建RDS关联表时，无需指定关联表的Schema。DLI会自动获取RDS中对应参数"dbtable"中的表的Schema来完成关联表的创建。
如果后续需要对RDS表的字段进行修改，关联表将不会自动同步这些更改。此时，您需要重新创建关联表，以确保关联表的Schema与修改后的RDS表保持一致。
#### 示例
访问MySQL
```
CREATE TABLE IF NOT EXISTS dli_to_rds
  USING JDBC OPTIONS (
  'url'='jdbc:mysql://to-rds-117405104-3eAHxnlz.datasource.com:3306',
  'driver'='com.mysql.jdbc.Driver',
  'dbtable'='rds_test.test1',
  'passwdauth' = 'xxx',
  'encryption' = 'true');
```
访问PostGre
```
CREATE TABLE IF NOT EXISTS dli_to_rds
  USING JDBC OPTIONS (
  'url'='jdbc:postgresql://to-rds-1174405119-oLRHAGE7.datasource.com:5432/postgreDB',
  'driver'='org.postgresql.Driver',
  'dbtable'='pg_schema.test1',
  'passwdauth' = 'xxx',
  'encryption' = 'true');
```
