
# 快速创建Doris集群并进行报表分析
Doris是一个基于MPP架构的高性能、实时的分析型数据库，以极速易用的特点被人们所熟知，仅需亚秒级响应时间即可返回海量数据下的查询结果，不仅可以支持高并发的点查询场景，也能支持高吞吐的复杂分析场景。本章节提供从零开始使用Doris操作指导：通过MySQL命令实现创建表，往表中插入数据，修改表，读取表数据，删除表中数据以及删除表的功能。
#### 背景信息
假定这是一张记录用户访问某商品页面行为的表信息，使用MySQL客户端实现业务操作：
- 创建用户信息表example_tbl。
- 在用户信息中新增访问时间、城市、性别、停留时长、花费。
- 根据用户user_id查询用户的基本信息。
- 业务结束后，删除用户信息表。
  表1原始数据 
  | user_id | date       | city | age | sex | last_visit_date     | cost | max_dwell_time | min_dwell_time |
  |:---|:---|:---|:---|:---|:---|:---|:---|:---|
  | 10000   | 2017-10-01 | A    | 20  | 0   | 2017-10-01 06:00:00 | 20   | 10             | 10             |
  | 10000   | 2017-10-01 | A    | 20  | 0   | 2017-10-01 07:00:00 | 15   | 2              | 2              |
  | 10001   | 2017-10-01 | A    | 30  | 1   | 2017-10-01 17:05:45 | 2    | 22             | 22             |
  | 10002   | 2017-10-02 | B    | 20  | 1   | 2017-10-02 12:59:12 | 200  | 5              | 5              |
  | 10003   | 2017-10-02 | C    | 32  | 0   | 2017-10-02 11:20:00 | 30   | 11             | 11             |
  | 10004   | 2017-10-01 | D    | 35  | 0   | 2017-10-01 10:00:15 | 100  | 3              | 3              |
  | 10004   | 2017-10-03 | D    | 35  | 0   | 2017-10-03 10:20:22 | 11   | 6              | 6              |
     
  
- 字段含义说明。
  表2参数说明 
  | 参数              | 数据                  | 说明                 |
  |:---|:---|:---|
  | user_id         | 10000               | 用户id，每个用户唯一识别id。   |
  | date            | 2017-10-01          | 数据入库时间，精确到日期。      |
  | city            | A                   | 用户所在城市。            |
  | age             | 20                  | 用户年龄。              |
  | sex             | 0                   | 性别男（1代表女性）。        |
  | last_visit_date | 2017-10-01 06:00:00 | 用户本次访问该页面的时间，精确到秒。 |
  | cost            | 20                  | 用户本次访问产生的消费。       |
  | max_dwell_time  | 10                  | 用户本次访问最大停留时间。      |
  | min_dwell_time  | 10                  | 用户本次访问最小停留时间。      |
     
  
 
#### 准备工作
- 已注册华为账号并开通华为云，具体请参见[注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)，且在使用CloudTable前检查账号状态，账号不能处于欠费或冻结状态。
- 已创建虚拟私有云和子网，参见创建[虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)。
 
#### 步骤一：购买Doris集群
1. 登录[表格存储服务控制台](https://console.huaweicloud.com/cloudtable)。
2. 控制台左上角选择区域。
3. 单击"集群管理"进入集群管理界面。
4. 单击集群管理界面右上角的"购买集群"，进入购买集群页面配置相关参数（安全组规则配置端口请参见[表3]）。
5. 单击"立即购买"，进入确认规格页面，确认无误，单击"完成"。
6. 返回集群列表查看创建集群进度，当集群状态为"服务中"时，集群创建成功，详细参见[创建Doris集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0232.html)。
    表3Doris安全组规则 
   | 方向  | 策略 | 协议端口/范围 | 类型        | 目的/源地址                    | 用途                  |
   |:---|:---|:---|:---|:---|:---|
   | 出方向 | 允许 | 全部      | IPv4/IPv6 | 0.0.0.0/0                 | 出方向放行。              |
   | 入方向 | 允许 | 9030    | IPv4/IPv6 | CloudTable Doris集群所在的安全组。 | FE上的mysql server端口。 |
   | 入方向 | 允许 | 8030    | IPv4/IPv6 | CloudTable Doris集群所在的安全组。 | FE上的http server端口。  |
   | 入方向 | 允许 | 8040    | IPv4/IPv6 | CloudTable Doris集群所在的安全组。 | BE上的http server的端口。 |
   | 入方向 | 允许 | 8050    | IPv4/IPv6 | CloudTable Doris集群所在的安全组。 | FE上的https server端口  |
      
   
 
#### 步骤二：准备弹性云服务器
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](https://support.huaweicloud.com/qs-cloudtable/cloudtable_06_0001.html#cloudtable_06_0001__li16591028135215)中获取的本地IP地址。单击"确定"安全组添加完成。
 
#### 步骤四：安装MySQL客户端
用户在弹性云服务器里可以通过手动安装客户端的方法安装客户端。
1. 下载[MySQL客户端](https://downloads.mysql.com/archives/community/)，根据实际情况选择版本。
2. 使用SSH登录工具（如PuTTY）通过"弹性IP"远程登录到Linux弹性云服务器。 具体登录操作步骤请参见《弹性云服务器用户指南》中的"[登录Linux弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0134.html) \> SSH密码方式登录"。
   
3. 进入SSH工具的根目录。
   ```
   cd /
   ```
   
4. 在根目录中新建一个文件夹，将[1]中下载的安装包上传到新建文件夹中。
   ```
   mkdir 文件夹名
   ```
   
5. 登录后执行以下命令解压安装包。
   ```
   cd <客户端安装包存放路径>
   tar xzvf 客户端压缩包名
   ```
   ![](https://support.huaweicloud.com/qs-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
   操作[步骤]提到的"\<客户端安装包存放路径\>"请替换为实际的客户端存放路径。
   
6. 进入bin目录。
   ```
   cd mysql-5.7.22-linux-glibc2.12-x86_64/bin/
   ```
   
7. 然后执行下面的命令连接Doris集群。
   ```
   ./mysql -uadmin -ppassword -h集群内网地址 -P9030
   ```
   ![](https://support.huaweicloud.com/qs-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
   - 集群内网地址：集群详情页面中集群访问地址，这里替换成您自己购买的集群的访问地址（FE节点的访问地址，都可以访问集群）。
   
   - ***password***为您购买集群时设置的密码，如果有特殊符号，特殊符号前面需要\\进行转义，如果密码整体用单引号括起来，则特殊字符不需要转义。
   
   - 端口：FE上的mysql server端口9030。
     
 
#### 步骤五：执行MySQL命令插入数据
1. 创建一个数据库。
   ```
   CREATE DATABASE demo;
   ```
   
2. 创建数据表
   - 使用数据库。
     ```
     USE demo;
     ```
     
   
   
   
   - 创建表。
     ```
     CREATE TABLE IF NOT EXISTS demo.example_tbl
     (
         `user_id` LARGEINT NOT NULL COMMENT "用户id",
         `date` DATE NOT NULL COMMENT "数据插入日期时间",
         `city` VARCHAR(20) COMMENT "用户所在城市",
         `age` SMALLINT COMMENT "用户年龄",
         `sex` TINYINT COMMENT "用户性别",
         `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
         `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
         `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
         `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
     )
     AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
     DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
     PROPERTIES (
         "replication_allocation" = "tag.location.default:3"
     );
     ```
     
    
3. 插入数据。
   ```
   INSERT INTO demo.example_tbl (user_id,date,city,age,sex,last_visit_date,cost,max_dwell_time,min_dwell_time) VALUES('10000','2017-10-01','A','20','0','2017-10-01 07:00:00','35','10','2'),('10001','2017-10-01','A','30','1','2017-10-01 17:05:45','2','22','22'),('10002','2017-10-02','B','20','1','2017-10-02 12:59:12','200','5','5'),('10003','2017-10-02','C','32','0','2017-10-02 11:20:12','30','11','11'),('10004','2017-10-01','D','35','0','2017-10-01 10:00:15','100','3','3'),('10004','2017-10-03','D','35','0','2017-10-03 10:20:22','11','6','6');
   ```
   
4. 查询数据。
   - 完成了建表，数据导入，下面我们就可以体验Doris的数据快速查询分析能力。
     ```
     mysql> SELECT * FROM demo.example_tbl;                                                                                                                                                                      +---------+------------+------+------+------+---------------------+------+----------------+----------------+
     | user_id | date       | city | age  | sex  | last_visit_date     | cost | max_dwell_time | min_dwell_time |
     +---------+------------+------+------+------+---------------------+------+----------------+----------------+
     | 10000   | 2017-10-01 | A    |   20 |    0 | 2017-10-01 07:00:00 |   35 |             10 |              2 |
     | 10001   | 2017-10-01 | A    |   30 |    1 | 2017-10-01 17:05:45 |    2 |             22 |             22 |
     | 10002   | 2017-10-02 | B    |   20 |    1 | 2017-10-02 12:59:12 |  200 |              5 |              5 |
     | 10003   | 2017-10-02 | C    |   32 |    0 | 2017-10-02 11:20:12 |   30 |             11 |             11 |
     | 10004   | 2017-10-01 | D    |   35 |    0 | 2017-10-01 10:00:15 |  100 |              3 |              3 |
     | 10004   | 2017-10-03 | D    |   35 |    0 | 2017-10-03 10:20:22 |   11 |              6 |              6 |
     +---------+------------+------+------+------+---------------------+------+----------------+----------------+
     6 rows in set (0.02 sec)
     ```
     
   
   - 查看指定城市信息。
     ```
     mysql> SELECT * FROM demo.example_tbl where city='B';
     +---------+------------+------+------+------+---------------------+------+----------------+----------------+
     | user_id | date       | city | age  | sex  | last_visit_date     | cost | max_dwell_time | min_dwell_time |
     +---------+------------+------+------+------+---------------------+------+----------------+----------------+
     | 10002   | 2017-10-02 | B    |   20 |    1 | 2017-10-02 12:59:12 |  200 |              5 |              5 |
     +---------+------------+------+------+------+---------------------+------+----------------+----------------+
     1 row in set (0.10 sec)
     ```
     
    
5. 删除数据。
   1. 删除指定行数据。
      ```
      mysql> DELETE FROM demo.example_tbl WHERE user_id = 10003;
      Query OK, 0 rows affected (0.04 sec)
      {'label':'delete_77ed273a-a052-4d64-bac0-23916b698003', 'status':'VISIBLE', 'txnId':'39'}
      ```
      
   
   2. 删除表。
      ```
      mysql> DROP TABLE demo.example_tbl;
      Query OK, 0 rows affected (0.01 sec)
      ```
      
    
 
