
# 添加ClickHouse数据源
#### 操作场景
ClickHouse数据源中同一个Schema（或Database）下不能存在名字内容相同但大小写格式不同的Table，例如：cktable（小写）、CKTABLE（大写）和CKtable（大小写混合），该内容的Table只能有一个，否则HetuEngine无法使用该Schema（或Database）下的表。本章节指导用户在集群的HSConsole界面添加ClickHouse类型的JDBC数据源。
#### 添加ClickHouse数据源操作步骤
1. 使用HetuEngine管理员用户登录Manager界面。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"集群 \> 服务 \> HetuEngine"，进入HetuEngine服务页面。
3. 在"概览"页签下的"基本信息"区域，单击"HSConsole WebUI"后的链接，进入HSConsole界面。
4. 选择"数据源"，单击"添加数据源"，在"添加数据源"页面填写参数。 
   1. 配置"基本配置"，填写数据源名称，"数据源类型"选择"JDBC \> ClickHouse"，"驱动"默认为"clickhouse"。
   
   2. 配置"ClickHouse配置"，参数配置请参考[表1]。
       表1ClickHouse配置 
      | 参数                | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 取值样例                                                                           |
      |:---|:---|:---|
      | JDBC URL          | ClickHouse数据源的JDBC URL地址。 - ClickHouse数据源使用IPV4，则格式为：jdbc:clickhouse://\<host\>:\<port\>  - ClickHouse数据源使用IPV6，则格式为：jdbc:clickhouse://\[\<host\>\]:\<port\>   其中： - \<host\>获取方法：登录ClickHouse数据源所在集群的Manager页面，选择"集群 \> 服务 \> ClickHouse \> 实例"，查看ClickHouseBalancer所在的"业务IP"。随机选取一个IP地址即可，目前仅支持填写一个IP地址。  - \<port\>获取方法：登录ClickHouse数据源所在集群的Manager页面，选择"集群 \> 服务 \> ClickHouse \> 配置 \> 全部配置"，如果ClickHouse数据源是安全模式则查看ClickHouseBalancer实例HTTPS端口，即"lb_https_port"参数的"值"；如果ClickHouse数据源是普通模式则查看ClickHouseBalancer实例HTTP端口，即"lb_http_port"参数的"值"。   | jdbc:clickhouse://10.162.156.243:21426或者jdbc:clickhouse://10.162.156.243:21425 |
      | 用户名               | 连接ClickHouse数据源的用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 根据连接数据源的用户名修改。                                                                 |
      | 密码                | 连接ClickHouse数据源的用户密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 根据连接数据源的用户密码修改。                                                                |
      | Schema/Table大小写敏感 | 支持数据源的Schema/Table名称大小写格式敏感。 HetuEngine支持数据源的Schema/Table名称大小写格式敏感。 - 否：当数据源同一个Schema下有多个Table名称，如cktable（小写）、CKTABLE（大写）和CKtable（大小写混合），HetuEngine只能使用cktable（小写）。  - 是：要求数据源同一个Schema下只能有一个Table名称，如cktable（小写）或者CKTABLE（大写）或者CKtable（大小写混合），否则HetuEngine无法使用该Schema下的所有表。                                                                                                                                                                                                                                                                                                                                                                                                       | -                                                                              |
         
      
   
   3. （可选）自定义配置。
      单击"增加"可以增加自定义配置参数。配置ClickHouse数据源自定义参数，参考[表2]。
       表2ClickHouse数据源自定义配置参数 
      | 参数                                       | 描述                                                                                                        | 取值样例   |
      |:---|:---|:---|
      | use-connection-pool                      | 是否使用JDBC连接池。                                                                                              | true   |
      | jdbc.connection.pool.maxTotal            | JDBC连接池中最大连接数。                                                                                            | 8      |
      | jdbc.connection.pool.maxIdle             | JDBC连接池中最大空闲连接数。                                                                                          | 8      |
      | jdbc.connection.pool.minIdle             | JDBC连接池中最小空闲连接数。                                                                                          | 0      |
      | jdbc.connection.pool.testOnBorrow        | 从JDBC连接池中获取连接使用时是否对连接的有效性做检验。                                                                             | false  |
      | clickhouse.map-string-as-varchar         | 是否将ClickHouse数据源String和FixedString类型处理成Varchar类型。 默认值：true                | true   |
      | clickhouse.socket-timeout                | 连接ClickHouse数据源超时时长。 单位：毫秒 默认值：120000        | 120000 |
      | case-insensitive-name-matching.cache-ttl | 数据源的大小写敏感的Schema/Table名称缓存超时时长。 单位：分钟 默认值：1 | 1      |
         
      单击"删除"可以删除已增加的自定义配置参数。
      
   
   
   
   4. 单击"确定"。
   
   
   
   
5. 登录集群客户端所在节点，执行以下命令，切换到客户端安装目录，例如安装目录为"/opt/client"，具体以实际替换。 
   ```
   cd /opt/client
   ```
   执行以下命令配置环境变量。
   ```
   source bigdata_env
   ```
   执行以下命令进行用户认证。（集群未启用Kerberos认证（普通模式）时跳过此步骤）
   ```
   kinit HetuEngine组件操作用户
   ```
   
   
6. 执行以下命令，登录数据源的catalog。 
   ```
   hetu-cli --catalog 数据源名称 --schema 数据库名
   ```
   例如执行以下命令：
   ```
   hetu-cli --catalog clickhouse_1 --schema default
   ```
   
   
7. 执行以下命令，可正常查看数据库表信息或不报错即表示连接成功。 
   ```
   show tables;
   ```
   
   
 
#### ClickHouse数据类型映射
ClickHouse数据类型到HetuEngine数据类型映射
| ClickHouse类型   | HetuEngine类型        |
|:---|:---|
| BOOLEAN        | BOOLEAN             |
| UInt8          | SMALLINT            |
| UInt16         | INTEGER             |
| UInt32         | BIGINT              |
| UInt64         | DECIMAL(20, 0)      |
| Int8           | TINYINT             |
| Int16          | SMALLINT            |
| Int32          | INTEGER             |
| Int64          | BIGINT              |
| Float32        | REAL                |
| Float64        | DOUBLE              |
| Decimal(P, S)  | DECIMAL(P, S)       |
| Decimal32(S)   | DECIMAL(P, S)       |
| Decimal64(S)   | DECIMAL(P, S)       |
| Decimal128(S)  | DECIMAL(P, S)       |
| IPv4           | VARCHAR             |
| IPv6           | VARCHAR             |
| UUID           | VARCHAR             |
| Enum8          | VARCHAR             |
| Enum16         | VARCHAR             |
| String         | VARCHAR / VARBINARY |
| Fixedstring(N) | VARCHAR / VARBINARY |
| Date           | DATE                |
| DateTime       | TIMESTAMP           |
   
#### 性能优化
- 查询下推 支持使用查询下推功能，提高查询速度。
  
- Scalar UDF下推 Scalar UDF下推功能默认打开。使用该功能前需根据需求在HetuEngine中创建映射函数。
  
 
#### 添加ClickHouse数据源约束
- HetuEngine支持对接ClickHouse操作的SQL语法：SHOW CATALOGS/SCHEMAS/TABLES/COLUMNS、DESCRIBE、USE、SELECT 表/视图。
- HetuEngine支持对接ClickHouse操作的表和视图如下表所示：
  表3HetuEngine支持对接ClickHouse操作的表和视图 
  | 名称                           | 支持对接ClickHouse操作的表、视图             |
  |:---|:---|
  | HetuEngine支持对ClickHouse操作的表  | 本地表（MergeTree）                    |
  | HetuEngine支持对ClickHouse操作的表  | 复制表（ReplicatedReplacingMergeTree） |
  | HetuEngine支持对ClickHouse操作的表  | 分布式表（Distributed）                 |
  | HetuEngine支持对ClickHouse操作的视图 | 普通视图（Normal）                      |
  | HetuEngine支持对ClickHouse操作的视图 | 物化视图（Materialized）                |
     
  
 
