
# 添加GBase数据源
#### 操作场景
HetuEngine支持配置GBase数据源实现对GBase数据源的接入与查询功能。本章节指导用户在集群的HSConsole界面添加GBase类型的JDBC数据源。
#### 前提条件
- 数据源与HetuEngine集群节点网络互通。
- 在HetuEngine所在集群的所有节点的"/etc/hosts"文件中，添加待对接数据源所在集群的主机名称和对应的IP映射。
- 集群已启用Kerberos认证（安全模式）创建HetuEngine管理员用户，集群未启用Kerberos认证（普通模式）创建HetuEngine业务用户，并为其赋予HDFS管理员权限，即创建用户时需同时加入"hadoop"和"hadoopmanager"用户组，创建用户可参考[创建HetuEngine权限角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1714.html)。
- 已创建HetuEngine计算实例，可参考[创建HetuEngine计算实例](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1731.html)。
- 已获取GBase数据库所在的IP地址，端口号，用户名及密码。
 
#### 约束与限制
本章节适用于MRS 3.5.0及之后的版本。
#### HetuEngine对接GBase数据源约束
- HetuEngine支持对接GBase操作的SQL语法：SHOW CATALOGS/SCHEMAS/TABLES/COLUMNS、DESCRIBE、USE、SELECT表/视图。
- HetuEngine支持的GBase数据源的Schema和Table名称不区分大小写。
 
#### 配置GBase数据源步骤
**安装集群客户端**
1. 安装包含HetuEngine服务的集群客户端，例如安装目录为"/opt/client"。
**准备GBase驱动**
2. 从GBase官网获取GBase驱动文件，格式为"*xxx*.jar"，需为"gbase-connector-java-9.5.0.1-build1-bin.jar"及以后版本。
3. 上传GBase驱动文件至HetuEngine所在集群。 
   可通过如下两种方式：
   - 通过Manager界面上传至HDFS：
     1. 使用HetuEngine管理员用户登录Manager界面，选择"集群 \> 服务 \> HDFS"，进入HDFS服务页面。
     
     2. 在"概览"页签下的"基本信息"区域，单击"NameNode Web UI"后的链接，进入NameNode Web UI界面。
     
     3. 选择"Utilities \> Browse the file system"，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002060872700.png)，创建"/user/hetuserver/fiber/extra_file/driver/gbase"目录。
     
     4. 进入"/user/hetuserver/fiber/extra_file/driver/gbase"目录，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002096951469.png)上传[2]获取的GBase驱动文件。
     
     5. 单击驱动文件所在行的"Permission"列的值，勾选"User"列的"Read"和"Write"，"Group"列的"Read"和"Other"列的"Read"，单击"Set"。
      
   
   - 通过使用HDFS命令直接上传：
     1. 将获取的GBase驱动文件上传至HDFS服务客户端所在节点任意目录。
     
     2. 登录HDFS服务客户端所在节点，切换到客户端安装目录，如"/opt/client"。
        ```
        cd /opt/hadoopclient
        ```
        
     
     3. 执行以下命令配置环境变量。
        ```
        source bigdata_env
        ```
        
     
     4. 如果集群为安全模式，执行以下命令进行用户认证。普通模式集群无需执行用户认证。
        ```
        kinit HetuEngine管理员用户
        ```
        根据回显提示输入密码。
        
     
     5. 执行如下命令创建目录"/user/hetuserver/fiber/extra_file/driver/gbase"，并上传[2]获取的GBase驱动，然后修改对应的权限。
        ```
        hdfs dfs -mkdir -p /user/hetuserver/fiber/extra_file/driver/gbase
        hdfs dfs -put GBase驱动文件路径 /user/hetuserver/fiber/extra_file/driver/gbase
        hdfs dfs -chmod -R 644 /user/hetuserver/fiber/extra_file/driver/gbase
        ```
        
      
   
   
   
   
**配置GBase数据源**
4. 使用HetuEngine管理员用户登录Manager界面，选择"集群 \> 服务 \> HetuEngine"，进入HetuEngine服务页面。
5. 在"概览"页签下的"基本信息"区域，单击"HSConsole WebUI"后的链接，进入HSConsole界面。
6. 选择"数据源"，单击"添加数据源"。在"添加数据源"页面填写参数。 
   1. 配置"基本配置"，填写数据源名称，"数据源类型"选择"JDBC \> GBase"。
   
   2. 配置"GBase配置"，参数配置请参考[表1]。
       表1GBase配置 
      | 参数       | 描述                                                                                                                                       | 取值样例                                        |
      |:---|:---|:---|
      | 驱动名称     | 选择[2]中已提前上传的待使用的GBase驱动，格式为*xxx*.jar。                                                                   | gbase-connector-java-9.5.0.1-build1-bin.jar |
      | JDBC URL | 连接GBase的JDBC URL地址。 格式：jdbc:gbase://*gbase数据库所在的IP地址* :*端口号*。 端口号默认为5258。 | jdbc:gbase://192.168.1.1:5258               |
      | 用户名      | 连接GBase数据源的GBase用户名。                                                                                                                     | -                                           |
      | 密码       | 连接GBase数据源的GBase用户密码。                                                                                                                    | -                                           |
         
      
   
   3. （可选）自定义配置。 单击"增加"可以增加自定义配置参数。配置GBase数据源自定义参数，参考[表2]。
       表2GBase数据源自定义配置参数 
      | 参数                                | 描述                                                                                                                                                                                                                                                                                                                                  | 取值样例   |
      |:---|:---|:---|
      | GBase.auto-reconnect              | 是否自动重连。 - true（默认值）：开启自动重连。  - false：关闭自动重连。                                                                                      | true   |
      | GBase.max-reconnects              | 最大重连次数，默认值：3。                                                                                                                                                                                                                                                                                                                       | 3      |
      | GBase.jdbc.use-information-schema | 驱动程序是否应该使用INFORMATION_SCHEMA来派生"DatabaseMetaData"使用的信息。                                                                                                                                                                                                                                                                             | true   |
      | use-connection-pool               | 是否使用JDBC连接池，默认值：true。                                                                                                                                                                                                                                                                                                               | true   |
      | jdbc.connection.pool.maxTotal     | JDBC连接池中最大连接数，默认值：8。                                                                                                                                                                                                                                                                                                                | 8      |
      | jdbc.connection.pool.maxIdle      | JDBC连接池中最大空闲连接数，默认值：8。                                                                                                                                                                                                                                                                                                              | 8      |
      | jdbc.connection.pool.minIdle      | JDBC连接池中最小空闲连接数，默认值：0。                                                                                                                                                                                                                                                                                                              | 0      |
      | unsupported-type-handling         | 当连接器不支持此数据类型时，是否将其转换为VARCHAR，从而避免失败。 - CONVERT_TO_VARCHAR：将不支持的类型转为VARCHAR类型，并且只支持对它们的读操作。  - IGNORE（默认值）：不支持的类型将不在查询结果中显示。   | IGNORE |
      | join-pushdown.enabled             | 是否启用Join下推。 - true（默认值）：开启Join下推。  - false：关闭Join下推。                                                                              | true   |
         
      单击"删除"可以删除已增加的自定义配置参数。
      
   
   4. 单击"确定"。
   
   
   
   
7. 登录集群客户端所在节点，执行以下命令，切换到客户端安装目录，例如安装目录为"/opt/client"，具体以实际替换。 
   ```
   cd /opt/hadoopclient
   ```
   执行以下命令配置环境变量。
   ```
   source bigdata_env
   ```
   执行以下命令，进行用户认证。（集群未启用Kerberos认证（普通模式）时跳过此步骤）
   ```
   kinit HetuEngine组件操作用户
   ```
   
   
8. 执行以下命令，登录数据源的catalog。 
   ```
   hetu-cli --catalog 数据源名称 --schema 数据库名
   ```
   例如执行以下命令：
   ```
   hetu-cli --catalog gbase_1 --schema gbasedb
   ```
   
   
9. 执行以下命令，可正常查看数据库表信息或不报错即表示连接成功。 
   ```
   show tables;
   ```
   
   
 
#### GBase与HetuEngine数据类型映射
表3GBase与HetuEngine数据类型映射 
| GBase类型        | HetuEngine类型   |
|:---|:---|
| TINYINT        | TINYINT        |
| SMALLINT       | SMALLINT       |
| INTEGER        | INTEGER        |
| BIGINT         | BIGINT         |
| DOUBLE         | DOUBLE         |
| FLOAT          | REAL           |
| DECIMAL(p, s)  | DECIMAL(p, s)  |
| CHAR(n)        | CHAR(n)        |
| VARCHAR(n)     | VARCHAR(n)     |
| TEXT           | VARCHAR(65535) |
| BLOB, LONGBLOB | VARBINARY      |
| DATE           | DATE           |
| TIME           | TIME           |
| DATETIME       | TIMESTAMP(6)   |
| TIMESTAMP(n)   | TIMESTAMP(n)   |
   
