
# 创建DLI表关联HBase
#### 功能描述
使用CREATE TABLE命令创建DLI表并关联HBase上已有的表。
![](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表关联HBase之前需要创建跨源连接。管理控制台操作请参考[增强型跨源连接](https://support.huaweicloud.com/usermanual-dli/dli_01_0426.html)。
- 请确保在DLI队列host文件中添加MRS集群master节点的"/etc/hosts"信息。 如何添加IP域名映射，请参见《数据湖探索用户指南》中[增强型跨源连接](https://support.huaweicloud.com/usermanual-dli/dli_01_0426.html)章节。
  
- 该语法不支持安全集群。
 
#### 语法格式
- 单个RowKey
  ```
  CREATE TABLE [IF NOT EXISTS] TABLE_NAME (
    ATTR1 TYPE,
    ATTR2 TYPE,
    ATTR3 TYPE)
    USING [CLOUDTABLE | HBASE] OPTIONS (
    'ZKHost'='xx',
    'TableName'='TABLE_IN_HBASE',
    'RowKey'='ATTR1',
    'Cols'='ATTR2:CF1.C1, ATTR3:CF1.C2');
  ```
  
- 组合RowKey
  ```
  CREATE TABLE [IF NOT EXISTS] TABLE_NAME (
    ATTR1 String,
    ATTR2 String,
    ATTR3 TYPE)
    USING [CLOUDTABLE | HBASE] OPTIONS (
    'ZKHost'='xx',
    'TableName'='TABLE_IN_HBASE',
    'RowKey'='ATTR1:2, ATTR2:10',
    'Cols'='ATTR2:CF1.C1, ATTR3:CF1.C2'
  ```
  
 
#### 关键字
表1CREATE TABLE关键字说明 
| **参数**                        | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|
| USING \[CLOUDTABLE \| HBASE\] | 指定hbase datasource，"CLOUDTABLE"或"HBASE"二选一，大小写不敏感。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ZKHost                        | HBase集群的ZK连接地址。 获取ZK连接地址需要先创建跨源连接，管理控制台操作请参考[增强型跨源连接](https://support.huaweicloud.com/usermanual-dli/dli_01_0426.html)。 - 访问CloudTable集群，填写ZK连接地址（内网）。  - 访问MRS集群，填写ZK所在节点IP与ZK对外端口，格式为："ZK_IP1:ZK_PORT1,ZK_IP2:ZK_PORT2"。   说明： 访问MRS集群，只支持创建增强型跨源连接并且需要配置主机信息，管理控制台操作请参考[增强型跨源连接](https://support.huaweicloud.com/usermanual-dli/dli_01_0426.html)，相关API信息请参考[创建增强型跨源连接](https://support.huaweicloud.com/api-dli/dli_02_0187.html)。 |
| TableName                     | 指定在HBase集群中已创建的表名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| RowKey                        | 指定作为rowkey的dli关联表字段，支持单rowkey与组合rowkey。单rowkey支持数值与String类型，不需要指定长度。组合rowkey仅支持String类型定长数据，格式为：属性名1:长度,属性名2:长度。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Cols                          | 通过逗号分隔的DLI表字段与HBase表的列之间的对应关系。其中，冒号前面放置DLI表字段，冒号后面放置HBase表信息，用'.'分隔HBase表的列族与列名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   
#### 注意事项
- 若所要创建的表已经存在将报错，可以通过添加IF NOT EXISTS参数跳过该错误。
- OPTIONS中的所有参数是必选的，参数名称大小写不敏感，但参数值大小写敏感。
- OPTIONS中引号内的值前后不能带空格，空格也会被当做有效值。
- 表名及列名的描述仅支持字符串常量。
- 创建表时要说明列名及对应的数据类型，目前支持的数据类型为：boolean、short、int、long、float、double和string。
- 作为RowKey的字段（如上述语法格式中的ATTR1），其值不能为null，长度要大于0，小于或等于32767。
- Cols与RowKey中的字段加起来的数量必须与DLI表的字段保持一致，即表中所有的字段都到对应到Cols和RowKey中，但是顺序可以任意。
- 组合Rowkey只支持String类型，在使用组合Rowkey时，每个属性后面必须带上长度。当Rowkey指定的字段只有一个的时候，该字段的类型可以是支持的所有数据类型，并且不需要填写长度。
- 在组合Rowkey的场景中
  - 插入Rowkey数据时，如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要短，则会在数据后面补'\\0'字符；如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要长，则会在实际插入HBase的时候进行截断。
  
  - 读取HBase上的Rowkey数据时，如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要短，则会抛出异常（OutofBoundException）；如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要长，则会在读取时进行截断。
   
 
#### 示例
```
CREATE TABLE test_hbase(
ATTR1 int,
ATTR2 int,
ATTR3 string)
using hbase OPTIONS (
'ZKHost'='to-hbase-1174405101-CE1bDm5B.datasource.com:2181',
'TableName'='HBASE_TABLE',
'RowKey'='ATTR1',
'Cols'='ATTR2:CF1.C1, ATTR3:CF1.C2');
```
