更新时间:2026-08-21 GMT+08:00
分享

快速使用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

操作步骤

  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地址
        • 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用户权限说明。例如,授予角色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地址
    • 数据库连接端口为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
    • 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;确认数据是否导入。如果数据已导入但查询结果为空,请检查查询条件是否正确,注意字符串比较区分大小写。

相关文档

相关文档