
# 使用ClickHouse客户端
ClickHouse是面向联机分析处理的列式数据库，支持SQL查询，且查询性能好，特别是基于大宽表的聚合分析查询性能非常优异，比其他分析型数据库速度快一个数量级。
#### 前提条件
已安装客户端，例如安装目录为"/opt/client"。以下操作的客户端目录只是举例，请根据实际安装目录修改。在使用客户端前，需要先下载并更新客户端配置文件，确认Manager的主管理节点后才能使用客户端。
#### 操作步骤
1. 安装客户端，具体请参考[安装客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)章节。
2. 以客户端安装用户，登录安装客户端的节点。
3. 执行以下命令，切换到客户端安装目录。 
   **cd /opt/client**
   
   
4. 执行以下命令配置环境变量。 
   **source bigdata_env**
   
   
5. 如果当前集群已启用Kerberos认证，执行以下命令认证当前用户，当前用户需要具有创建ClickHouse表的权限，具体请参见[ClickHouse用户及权限管理](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_24057.html)章节，为用户绑定对应角色。如果当前集群未启用Kerberos认证，则无需执行本步骤。
   
   如果是MRS 3.1.0版本集群，则需要先执行：**export CLICKHOUSE_SECURITY_ENABLED=true**
   **kinit** *组件业务用户*
   例如，**kinit**clickhouseuser。
   
   
6. 执行ClickHouse组件的客户端命令。 
   执行**clickhouse -h**，查看ClickHouse组件命令帮助。
   回显信息如下：
   ```
   Use one of the following commands:
   clickhouse local [args] 
   clickhouse client [args] 
   clickhouse benchmark [args] 
   clickhouse server [args] 
   clickhouse performance-test [args] 
   clickhouse extract-from-config [args] 
   clickhouse compressor [args] 
   clickhouse format [args] 
   clickhouse copier [args] 
   clickhouse obfuscator [args]
   ...
   ```
   MRS 3.1.0版本，使用**clickhouse client**命令连接ClickHouse服务端：
   - 例如，当前集群未启用Kerberos认证，使用非ssl方式登录： **clickhouse client --host** *ClickHouse的实例IP **-*** **-port** 9000 **--user** *用户名* **--password**
     *输入用户密码*
     
   
   
   
   - 例如，当前集群已启用Kerberos认证，使用ssl安全方式登录。 Kerberos集群场景下没有默认用户，必须在Manager上创建用户，详细参考[ClickHouse用户及权限管理](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_24057.html)。
     使用kinit认证成功后，客户端登录时可以不携带--user和--password参数，即使用kinit认证的用户登录。
     **clickhouse client --host** *ClickHouse的实例IP* **--port** 9440 **--secure**
     
   
   
   MRS 3.1.2及之后版本，使用**clickhouse client** 命令连接ClickHouse服务端：
   - 例如，当前集群未启用Kerberos认证，使用非ssl方式登录： **clickhouse client --host** *ClickHouse的实例IP* **--port** 9000**--user** *用户名* **--password**
     *输入用户密码*
     
   
   
   
   - 例如，当前集群已启用Kerberos认证，使用ssl安全方式登录。 Kerberos集群场景下没有默认用户，必须在Manager上创建用户，详细参考[ClickHouse用户及权限管理](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_24057.html)。
     **clickhouse client --** **host** *ClickHouse的实例IP* **--port** 9440**--user** *用户名* **--password** **--secure**
     *输入用户密码*
     
    
   执行**quit;**命令，退出ClickHouse服务端连接。
   相关参数使用说明如[表1]：
    表1clickhouse client命令行参数说明 
   | 参数名              | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|
   | --host           | 服务端的host名称，默认是localhost。您可以选择使用ClickHouse实例所在节点主机名或者IP地址。 说明： ClickHouse的实例IP地址可登录集群FusionInsight Manager，然后选择"集群 \> 服务 \> ClickHouse \> 实例"，获取ClickHouseServer实例对应的业务IP地址。                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | --port           | 连接的端口。 - 如果使用ssl安全连接则默认端口为9440，并且需要携带参数--secure。具体的端口值可通过ClickHouseServer实例配置搜索"tcp_port_secure"参数获取。  - 如果使用非ssl安全连接则默认端口为9000，不需要携带参数--secure。具体的端口值可通过ClickHouseServer实例配置搜索"tcp_port"参数获取。                                                                                                                                                                                                                                                                                               |
   | --user           | 用户名。 可以在Manager上创建该用户名并绑定对应的角色权限，具体请参见[ClickHouse用户及权限管理](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_24057.html)章节。 - 如果当前集群已启用Kerberos认证（集群为安全模式），使用kinit认证成功后，客户端登录时可以不携带--user和--password参数，即使用kinit认证的用户登录。Kerberos集群场景下没有默认用户，必须在Manager上创建该用户名。  - 如果当前集群未启用Kerberos认证（集群为普通模式），客户端登录时如果需要指定用户名和密码，不能使用FusionInsight Manager页面创建的ClickHouse用户，需要使用客户端命令行执行**create user SQL**语句创建ClickHouse用户。客户端登录时如果不需要指定用户名和密码参数时，默认使用default用户登录。   |
   | --password       | 密码。 默认值：空字符串。该参数和--user参数配套使用，可以在Manager上创建用户名时设置该密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | --query          | 使用非交互模式查询。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | --database       | 默认当前操作的数据库。默认值：服务端默认的配置（默认是default）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | --multiline      | 如果指定，允许多行语句查询（Enter仅代表换行，不代表查询语句完结）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | --multiquery     | 如果指定，允许处理用;号分隔的多个查询，只在非交互模式下生效。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | --format         | 使用指定的默认格式输出结果。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | --vertical       | 如果指定，默认情况下使用垂直格式输出结果。在这种格式中，每个值都在单独的行上打印，适用显示宽表的场景。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | --time           | 如果指定，非交互模式下会打印查询执行的时间到stderr中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | --stacktrace     | 如果指定，如果出现异常，会打印堆栈跟踪信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | --config-file    | 配置文件的名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | --secure         | 如果指定，将通过ssl安全模式连接到服务器。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | --history_file   | 存放命令历史的文件的路径。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | --param_\<name\> | 带有参数的查询，并将值从客户端传递给服务器。具体用法详见<https://clickhouse.com/docs/zh/interfaces/cli/#cli-queries-with-parameters>。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      
   
   
 
