
# 快速使用Doris
在企业数据分析场景中，业务系统积累了海量的结构化数据，需要对这些数据进行快速查询和分析以支持业务决策。传统的关系型数据库在面对大规模数据分析时，查询性能往往无法满足实时性要求，而大数据方案又过于复杂，部署和维护成本高。如何在保证查询性能的同时，降低数据分析的复杂度？Doris正是为解决这一问题而设计的高性能实时分析数据库。Doris基于MPP（大规模并行处理）架构，支持高并发的点查询和高吞吐的复杂分析场景，通过简单的SQL接口即可实现亚秒级查询响应。本文通过示例介绍如何快速使用MRS Doris集群进行基本的建表、数据导入和查询操作。
- **FE（Frontend）**：Doris的前端节点，负责接收客户端请求、解析SQL、生成执行计划、管理元数据和调度查询。FE节点通过MySQL协议与客户端通信。
- **BE（Backend）**：Doris的后端节点，负责数据存储和查询执行。BE节点以列式格式存储数据，通过向量化执行引擎处理查询请求。
- **Stream Load**：Doris提供的数据导入方式，通过HTTP协议将本地文件或数据流导入到Doris表中。Stream Load适用于单次导入数据量在GB级别的场景。
#### 约束与限制
- Doris数据库名和表名区分大小写。
- Doris表名不能为纯数字。
 
#### 前提条件
- 已创建包含Doris服务的集群，集群内各服务运行正常。
- 待连接Doris数据库的节点与MRS集群网络互通。
- 已安装MySQL客户端，相关操作可参考[使用MySQL客户端连接Doris](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249271.html)。
 
#### 操作步骤
1. 创建具有Doris管理权限的用户。 
   - 集群已启用Kerberos认证（安全模式）
     1. 登录FusionInsight Manager，选择"系统 \> 权限 \> 角色 \> 添加角色"，填写角色名称，如"dorisrole"，在"配置资源权限"选择"*待操作的集群* \> Doris"，勾选"Doris管理员权限"，单击"确定"。
     
     2. 选择"用户 \> 添加用户"，填写用户名称，如"dorisuser"，"用户类型"选择"人机"，"密码策略"默认，输入用户密码并确认密码，关联"dorisrole"角色，单击"确定"。
     
     3. 使用新建的**dorisuser**用户重新登录FusionInsight Manager，修改该用户初始密码。
      
   
   - 集群未启用Kerberos认证（普通模式）
     1. 登录安装了MySQL客户端的节点，使用**admin** 用户连接Doris服务。
        ```
        mysql -uadmin -P数据库连接端口 -hDoris FE实例IP地址
        ```
        ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
        - **admin**用户默认密码为空。
        
        - 数据库连接端口为Doris FE的查询连接端口，可以通过登录Manager，单击"集群 \> 服务 \> Doris \> 配置"，查询Doris服务的"query_port"参数获取。
        
        - Doris FE实例IP地址可通过登录MRS集群的Manager界面，单击"集群 \> 服务 \> Doris \> 实例"，查看任一FE实例的IP地址。
        
        - 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。
        
        - 仅MRS 3.3.0及之后版本的开启Kerberos认证的集群支持通过FusionInsight Manager创建角色进行赋权，如果集群为MRS 3.3.0之前的版本，无论是否开启Kerberos认证，都需要通过**root**用户（默认密码为空）来连接数据库。
          
     
     2. 执行以下命令创建角色：
        ```
        CREATE ROLE dorisrole;
        ```
        
     
     3. 执行以下命令给角色授权，具体权限介绍请参见[Doris用户权限说明](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249192.html)。例如，授予角色ADMIN_PRIV权限：
        ```
        GRANT ADMIN_PRIV ON *.*.* TO ROLE 'dorisrole';
        ```
        
     
     4. 执行以下命令创建用户并绑定角色：
        ```
        CREATE USER 'dorisuser'@'%' IDENTIFIED BY 'password' DEFAULT ROLE 'dorisrole';
        ```
        命令中如果携带认证密码信息可能存在安全风险，在执行命令前建议关闭系统的history命令记录功能，避免信息泄露。
        
      
   
   
   
   
2. 登录安装了MySQL的节点，执行以下命令连接Doris数据库。 
   如果集群已启用Kerberos认证（安全模式），需先执行以下命令再连接Doris数据库：
   ```
   export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
   ```
   ```
   mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
   ```
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 数据库连接端口为Doris FE的查询连接端口，可以通过登录Manager，单击"集群 \> 服务 \> Doris \> 配置"，查询Doris服务的"query_port"参数获取。
   
   - Doris FE实例IP地址可通过登录MRS集群的Manager界面，单击"集群 \> 服务 \> Doris \> 实例"，查看任一FE实例的IP地址。
   
   - 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。
    
   
   
3. 执行以下命令可查看FE运行状态。 
   ```
   SHOW FRONTENDS\G;
   ```
   ```
   SHOW BACKENDS\G;
   ```
   
   
4. 执行以下命令创建数据库： 
   ```
   create database if not exists mrs_demo;
   ```
   ```
   use mrs_demo;
   ```
   
   
5. 执行以下命令在数据库中创建数据表：
   
   ```
   CREATE TABLE IF NOT EXISTS mrs_table
   (
   `user_id` LARGEINT NOT NULL COMMENT "用户id",
   `date` DATE NOT NULL COMMENT "数据灌入日期",
   `city` VARCHAR(20) COMMENT "城市",
   `age` SMALLINT COMMENT "年龄",
   `gender` 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 "99999" COMMENT "用户最大停留时间",
   `min_dwell_time` INT MIN DEFAULT "0" COMMENT "用户最小停留时间"
   )
   AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `gender`)
   DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
   PROPERTIES (
   "replication_allocation" = "tag.location.default: 1"
   );
   ```
   
   
6. 在当前节点的任意目录下创建"test.csv"文件，内容如下： 
   ```
   10000,2017-10-01,city1,20,0,2017-10-01 06:00:00,20,10,10
   10000,2017-10-01,city2,20,0,2017-10-01 07:00:00,15,2,2
   10001,2017-10-01,city3,30,1,2017-10-01 17:05:45,2,22,22
   10002,2017-10-02,city4,20,1,2017-10-02 12:59:12,200,5,5
   10003,2017-10-02,city5,32,0,2017-10-02 11:20:00,30,11,11
   10004,2017-10-01,city6,35,0,2017-10-01 10:00:15,100,3,3
   10004,2017-10-03,city7,35,0,2017-10-03 10:20:22,11,6,6
   ```
   
   
7. 通过Stream Load方式将"test.csv"中的数据导入到[5]创建的表中。
   
   ```
   cd test.csv所在目录
   ```
   ```
   curl -k --location-trusted -u doris用户名:用户密码 -H "label:table1_20230217" -H "column_separator:," -T test.csv http://Doris FE实例IP地址:HTTP端口/api/mrs_demo/mrs_table/_stream_load
   ```
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - Doris FE实例IP地址可在Manager界面，选择"集群 \> 服务 \> Doris \> 实例"查看。
   
   - HTTP端口号可在Manager界面，选择"集群 \> 服务 \> Doris \> 配置"，搜索"http_port"查看。
    
   
   
8. 执行以下命令查询数据： 
   ```
   select * from mrs_table where city='city1';
   ```
   
   
**验证操作：**
执行以下命令验证数据导入是否成功：
```
select count(*) from mrs_table;
```
如果返回结果为7，则表示数据导入成功。也可以执行以下命令查看特定条件的数据：
```
select * from mrs_table where city='city1';
```
#### 常见问题
- **连接Doris失败**
  连接失败的常见原因包括：网络不通、端口错误、用户名密码错误、FE节点未启动等。
  请确认客户端节点与Doris FE节点网络互通，检查query_port端口是否正确，确认用户名密码正确。在Manager的服务页面查看FE节点状态是否正常。
  
- **Stream Load导入失败**
  导入失败的常见原因包括：HTTP端口错误、用户名密码错误、文件格式不正确、表不存在等。
  请确认http_port端口正确，用户名密码正确，CSV文件格式与表结构匹配，表已创建成功。查看curl命令的返回信息，根据错误提示定位问题。
  
- **查询结果为空**
  查询结果为空可能是因为数据未导入成功，或者查询条件不匹配。
  先执行**select count(\*) from mrs_table;**确认数据是否导入。如果数据已导入但查询结果为空，请检查查询条件是否正确，注意字符串比较区分大小写。
  
 
#### 相关文档
- 了解如何使用MySQL客户端连接Doris，请参考[使用MySQL客户端连接Doris](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249271.html)。
- 了解Doris用户权限说明，请参考[Doris用户权限说明](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249192.html)。
- 了解如何访问Doris WebUI页面查看组件状态，请参考[访问Doris WebUI页面](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249267.html)。
 
