
# 创建DLI表关联DCS
#### 功能描述
使用CREATE TABLE命令创建DLI表并关联DCS上已有的Key。
![](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表关联DCS之前需要创建跨源连接，绑定队列。管理控制台操作请参考[增强型跨源连接](https://support.huaweicloud.com/usermanual-dli/dli_01_0426.html)。
#### 语法格式
- 指定Key
  ```
  CREATE TABLE [IF NOT EXISTS] TABLE_NAME(
      FIELDNAME1 FIELDTYPE1,
      FIELDNAME2 FIELDTYPE2)
    USING REDIS OPTIONS (
    'host'='xx',
    'port'='xx',
    'passwdauth' = 'xxx',
    'encryption' = 'true',
    'table'='namespace_in_redis:key_in_redis',
    'key.column'= 'FIELDNAME1'
  );
  ```
  
- 通配key
  ```
  CREATE TABLE [IF NOT EXISTS] TABLE_NAME(
      FIELDNAME1 FIELDTYPE1,
      FIELDNAME2 FIELDTYPE2)
    USING REDIS OPTIONS (
    'host'='xx',
    'port'='xx',
    'passwdauth' = 'xxx',
    'encryption' = 'true',
    'keys.pattern'='key*:*',
    'key.column'= 'FIELDNAME1'
  );
  ```
  
 
#### 关键字
表1CREATE TABLE关键字说明 
| **参数**                 | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|
| host                   | DCS的连接IP，需要先创建跨源连接，管理控制台操作请参考[增强型跨源连接](https://support.huaweicloud.com/usermanual-dli/dli_01_0426.html)。 创建增强型跨源连接后，使用DCS提供的"连接地址"。"连接地址"有多个时，选择其中一个即可。 说明： 访问DCS目前只支持增强型跨源。                                                                                                                                            |
| port                   | DCS的连接端口，例如6379。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| password               | （已废弃）创建DCS集群时填写的密码。访问非安全Redis集群时不需要填写。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| passwdauth             | 跨源密码认证名称。跨源认证信息创建方式请参考《数据湖探索用户指南》\>《[跨源认证](https://support.huaweicloud.com/usermanual-dli/dli_01_0427.html)》。                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| encryption             | 使用跨源密码认证时配置为"true"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| table                  | 对应Redis中的Key或Hash Key。 - 插入redis数据时必填。  - 查询redis数据时与"keys.pattern"参数二选一。   |
| keys.pattern           | 使用正则表达式匹配多个Key或Hash Key。该参数仅用于查询时使用。查询redis数据时与"table"参数二选一。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| key.column             | 非必填。用于指定schema中的某个字段作为Redis中key的标识。在插入数据时与参数"table"配合使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| partitions.number      | 读取数据时，并发task数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| scan.count             | 每批次读取的数据记录数，默认为100。如果在读取过程中，redis集群中的CPU使用率还有提升空间，可以调大该参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| iterator.grouping.size | 每批次插入的数据记录数，默认为100。如果在插入过程中，redis集群中的CPU使用率还有提升空间，可以调大该参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| timeout                | 连接redis的超时时间，单位ms，默认值2000（2秒超时）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
访问DCS时，不支持复杂类型数据（Array、Struct、Map等）。
可以考虑以下几种方式进行复杂类型数据处理：
- 字段扁平化处理，将下一级的字段展开放在同一层Schema字段中。
- 使用二进制方式进行写入与读取，并通过自定义函数进行编解码。
 
#### 示例
- 指定table
```
create table test_redis(name string, age int) using redis options(
  'host' = '192.168.4.199',
  'port' = '6379',
  'passwdauth' = 'xxx',
  'encryption' = 'true',
  'table' = 'person'
);
```
- 通配table名
```
create table test_redis_keys_patten(id string, name string, age int) using redis options(
  'host' = '192.168.4.199',
  'port' = '6379',
  'passwdauth' = 'xxx',
  'encryption' = 'true',
  'keys.pattern' = 'p*:*',
  'key.column' = 'id'
);
```
