
# 快速创建ClickHouse集群并进行统计分析
ClickHouse为您提供方便易用、灵活稳定的云端ClickHouse托管服务。只需要几分钟，便可完成海量数据查询数据仓库的搭建，简单轻松地完成对数据的实时查询分析，提升数据价值挖掘的整体效率。云数据仓库ClickHouse是一种基于MPP（大规模并行处理）架构的数仓服务，基于ClickHouse优异的查询性能，查询效率数倍于传统数据仓库。
#### 背景信息
假定这是一张学生成绩表信息，使用客户端实现业务操作：
- 创建用户信息表demo_t。
- 在用户信息中新增访问性别、科目。
- 根据用户user_id查询用户的基本信息。
- 业务结束后，删除用户信息表。
  表1成绩表 
  | user_id | name | sex | subject | score | time                |
  |:---|:---|:---|:---|:---|:---|
  | 10000   | A    | 1   | 语文      | 89    | 2023-07-01 09:00:00 |
  | 10001   | B    | 0   | 数学      | 132   | 2023-07-01 09:00:00 |
  | 10002   | C    | 0   | 数学      | 90    | 2023-07-02 09:00:00 |
  | 10003   | D    | 0   | 英语      | 120   | 2023-07-01 14:00:00 |
  | 10004   | E    | 1   | 语文      | 101   | 2023-07-01 09:00:00 |
  | 10005   | F    | 1   | 语文      | 110   | 2023-07-01 09:00:00 |
     
  表2参数说明 
  | 参数      | 数据                  | 说明                |
  |:---|:---|:---|
  | user_id | 10000               | 用户id，每个用户唯一识别id。  |
  | name    | A                   | 学生姓名。             |
  | sex     | 1                   | 性别女（0代表男生，1代表女生）。 |
  | subject | 语文                  | 代表学科。             |
  | score   | 89                  | 代表学生成绩。           |
  | time    | 2023-07-01 09:00:00 | 数据入库时间。           |
     
  
 
#### 准备工作
- 已注册华为账号并开通华为云，具体请参见[注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)，且在使用CloudTable前检查账号状态，账号不能处于欠费或冻结状态。
- 已创建虚拟私有云和子网，参见创建[虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)。
 
#### 步骤一：购买ClickHouse集群
1. 登录[表格存储服务控制台](https://console.huaweicloud.com/cloudtable)。
2. 控制台左上角选择区域。
3. 单击"集群管理"进入集群管理界面。
4. 单击集群管理界面右上角的"购买集群"，进入购买集群页面配置相关参数（安全组规则配置端口请参见[表3]）。
5. 单击"立即购买"，进入确认规格页面，确认无误，单击"完成"。
6. 返回集群列表查看创建集群进度，当集群状态为"服务中"时，集群创建成功，详细参见[创建ClickHouse集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0300.html)。
    表3ClickHouse安全组规则 
   | 方向  | 策略 | 协议端口/范围 | 类型        | 目的/源地址                         | 说明                    |
   |:---|:---|:---|:---|:---|:---|
   | 出方向 | 允许 | 全部      | IPv4/IPv6 | 0.0.0.0/0                      | 出方向放行。                |
   | 入方向 | 允许 | 8123    | IPv4/IPv6 | CloudTable ClickHouse集群所在的安全组。 | ClickHouse的Http协议端口。  |
   | 入方向 | 允许 | 9000    | IPv4/IPv6 | CloudTable ClickHouse集群所在的安全组。 | ClickHouse的TCP协议端口。   |
   | 入方向 | 允许 | 8443    | IPv4/IPv6 | CloudTable ClickHouse集群所在的安全组。 | ClickHouse的Https协议端口。 |
   | 入方向 | 允许 | 9440    | IPv4/IPv6 | CloudTable ClickHouse集群所在的安全组。 | ClickHouse的安全TCP安全端口。 |
   | 入方向 | 允许 | 2181    | IPv4/IPv6 | CloudTable ClickHouse集群所在的安全组。 | 监听ZooKeeper客户端连接监听端口。 |
      
   
 
 #### 步骤二：下载ClickHouse客户端和客户端校验文件
1. 登录[表格存储服务控制台](https://console.huaweicloud.com/cloudtable)。
2. 在控制台左上角选择区域。
3. 单击"帮助"，进入帮助页面。
4. 单击帮助页面右侧"常用链接 \> ClickHouse客户端下载"，下载客户端安装包。
5. 单击"客户端校验文件下载"，下载校验文件。
 
#### 步骤三：准备弹性云服务器
1. 购买弹性云服务器，登录[ECS控制台](https://console.huaweicloud.com/ecm/?#/ecs/manager/vmList)。
2. 控制台左上角选择区域。
3. 单击页面右上角"购买弹性云服务器"，进入配置界面。
4. 配置弹性云服务器参数：基础配置、实例、操作系统、存储备份、网络、安全组、公网访问、云服务器管理、高级配置、购买量。 VPC、子网、安全组与集群保持一致。
   
5. 参数配置后，勾选"协议"并单击"立即购买"。ECS创建成功后会默认开机。 具体请参见弹性云服务"[自定义购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html#section5)"章节。
   
 
#### 步骤四：添加安全组
在ECS安全组中添加本地主机的IP地址。
1. 获取本地主机IP，按键盘中"win+R"，弹出运行界面。
2. 在输入框中输入"cmd"，单击"确定"，进入cmd运行窗口，
3. 在命令窗口输入"ipconfig"，单击"回车"，查询本机IP。
4. 购买弹性云服务器，登录[ECS控制台](https://console.huaweicloud.com/ecm/?#/ecs/manager/vmList)。
5. 进入"弹性云服务器 "列表页面，单击"弹性云服务名称 \> 基本信息 \> 安全组名称 \> 入方向规则"，进入入方向规则页面。
6. 单击页面右上角的"添加规则"，弹出"添加入方向规则"页面。
7. 源地址中填写步骤[3]中获取的本地IP地址。单击"确定"安全组添加完成。
 
 #### 步骤五：安装ClickHouse客户端并校验客户端
用户在弹性云服务器里可以通过手动安装客户端的方法安装客户端。
1. 使用SSH登录工具（如PuTTY）通过"弹性IP"远程登录到Linux弹性云服务器。 具体登录操作步骤请参见《弹性云服务器用户指南》中的"[登录Linux弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0134.html) \> SSH密码方式登录"。
   
2. 将[步骤二]中下载的客户端传输到Linux弹性云服务器。
3. 安装客户端，连接集群。
   1. 使用SSH登录工具，通过弹性IP远程登录到Linux弹性云服务器。 具体登录操作步骤请参见《弹性云服务器用户指南》中的" [SSH密码方式登录](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0017955633.html)"。
      
   
   2. 进入SSH工具的根目录。
      ```
      cd /
      ```
      
   
   3. 在根目录中新建一个文件夹。
      ```
      mkdir 文件夹名
      ```
      
   
   4. 进入新建的目录中。
      ```
      cd /文件夹名/
      ```
      
   
   5. 将客户端放在新建的目录下。
   
   6. 解压客户端。
      ```
      tar  -zxf   客户端包名
      ```
      
   
   7. 解压"客户端校验文件"，与客户端解压在同一个目录下。
      1. 解压"客户端校验文件"。
         ```
         cd <客户端校验文件存放路径>
         tar xzvf Client_sha256.tar.gz
         ```
         
      
      2. 获取客户端校验码。
         ```
         sha256sum ClickHouse_Client_23.3.tar.gz
         ```
         
      
      3. 查看客户端校验文件中的校验码，并与客户端校验码进行对比。如果对比结果一致，代表客户端未被篡改，如果对比结果不一致，则代表客户端被篡改。
         ```
         less ClickHouse_Client_23.3.tar.gz.sha256
         ```
         
       
   
   8. 加载so。
      ```
      sh install.sh
      ```
      
   
   9. 进入bin目录，加权限。
      ```
      cd bin/
      ```
      加权限。
      ```
      chmod 700 clickhouse
      ```
      
   
   10. 然后执行以下命令连接ClickHouse集群。
       非安全集群连接命令
       ```
       ./clickhouse client --host 集群内网地址   --port 9000 --user admin --password password
       ```
       安全集群连接命令，详细操作请参见[安全集群连接步骤](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0381.html)。
       ```
       ./clickhouse client --host 集群内网地址   --port 9440 --user admin --password password --secure --config-file /root/config.xml
       ```
       ![](https://support.huaweicloud.com/qs-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
       - 集群内网地址：集群详情页面中集群访问地址，这里替换成您自己购买的集群的访问地址。
       
       - password为您购买集群时设置的密码，如果有特殊符号，特殊符号前面需要\\进行转义，如果密码整体用单引号括起来，则特殊字符不需要转义。
         
    
 
#### 步骤六：插入数据
在[步骤五]的命令窗口中执行以下命令，使用ClickHouse集群快速创建数据表，并对表数据进行查询。
1. 创建数据库。
   ```
   create database DB_demo;
   ```
   
2. 使用数据库。
   ```
   use DB_demo;
   ```
   
3. 创建表。
   ```
   create table DB_demo_t(user_id Int32,name String,sex Tinyint ,subject String,score Int32,time datetime)engine=TinyLog;
   ```
   
4. 插入数据。
   ```
   insert into DB_demo_t(user_id,name,sex,subject,score,time) values('10000','A','1','语文','89','2023-07-01 09:00:00');
   insert into DB_demo_t(user_id,name,sex,subject,score,time) values('10001','B','0','数学','132','2023-07-01 09:00:00');
   insert into DB_demo_t(user_id,name,sex,subject,score,time) values('10002','C','0','数学','90','2023-07-02 09:00:00');
   insert into DB_demo_t(user_id,name,sex,subject,score,time) values('10003','D','0','英语','120','2023-07-01 14:00:00');
   insert into DB_demo_t(user_id,name,sex,subject,score,time) values('10004','E','1','语文','101','2023-07-01 09:00:00');
   insert into DB_demo_t(user_id,name,sex,subject,score,time) values('10005','F','1','语文','110','2023-07-01 09:00:00');
   ```
   
5. 查询数据。
   - 查询导入的数据。
     ```
     host-172-16-13-95 :) select * from DB_demo_t;
     SELECT *
     FROM DB_demo_t
     Query id: 4e119f77-0592-4131-bbe2-31f42bc069a1
     ┌─user_id─┬─name─┬─sex─┬─subject─┬─score─┬────────────────time─┐
     │   10000 │ A    │   1 │ 语文   │    89 │ 2023-07-01 09:00:00 │
     │   10001 │ B    │   0 │ 数学   │   132 │ 2023-07-01 09:00:00 │
     │   10002 │ C    │   0 │ 数学   │    90 │ 2023-07-02 09:00:00 │
     │   10003 │ D    │   0 │ 英语   │   120 │ 2023-07-01 14:00:00 │
     │   10004 │ E    │   1 │ 语文   │   101 │ 2023-07-01 09:00:00 │
     │   10005 │ F    │   1 │ 语文   │   110 │ 2023-07-01 09:00:00 │
     └─────────┴──────┴─────┴────────┴───────┴─────────────────────┘
     6 rows in set. Elapsed: 0.004 sec.
     ```
     
    
6. 删除数据。
   - 删除表。
     ```
     drop table DB_demo_t;
     ```
     
   
   - 删除数据库。
     ```
     drop database DB_demo;
     ```
     
    
 
