Apache Doris快速入门教程

10 阅读4分钟

Apache Doris 是一款高性能、实时分析型数据库,支持MySQL协议,适合做大数据分析和实时查询。下面用最简单的语言,带你一步步了解Doris的基础知识和操作流程,并配上示例代码,帮助你快速理解和使用。


1. 环境准备与登录

  • Doris使用MySQL协议,默认前端服务(FE)端口是9030。
  • 使用MySQL客户端连接Doris:
mysql -h 127.0.0.1 -P 9030 -uroot
  • 初次登录后,建议修改root密码:
set password for 'root' = PASSWORD('your_password');

2. 创建数据库和用户权限

  • 创建数据库(需要管理员权限):
CREATE DATABASE example_db;
  • 查看已有数据库:
SHOW DATABASES;
  • 给用户授权操作权限:
GRANT ALL ON example_db TO test;

3. 创建表结构

Doris中数据存储在表里,表由行和列组成。表可以设置分区和分桶,帮助优化查询性能和存储效率。

3.1 简单表(单分区)示例

CREATE TABLE table1 (
    siteid INT DEFAULT 10,
    citycode SMALLINT,
    username VARCHAR(32) DEFAULT '',
    pv BIGINT SUM DEFAULT 0
)
AGGREGATE KEY(siteid, citycode, username)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1");
  • AGGREGATE KEY表示这是一个聚合表,pv字段会自动求和。
  • DISTRIBUTED BY HASH(siteid) BUCKETS 10表示根据siteid字段做哈希分桶,分成10个桶,数据均匀分布。
  • replication_num=1表示数据只有1份副本,生产环境建议设置为3保证安全。

3.2 带时间分区的表示例

CREATE TABLE table2 (
    event_day DATE,
    siteid INT DEFAULT 10,
    citycode SMALLINT,
    username VARCHAR(32) DEFAULT '',
    pv BIGINT SUM DEFAULT 0
)
AGGREGATE KEY(event_day, siteid, citycode, username)
PARTITION BY RANGE(event_day) (
    PARTITION p1 VALUES LESS THAN ('2017-06-30'),
    PARTITION p2 VALUES LESS THAN ('2017-07-31'),
    PARTITION p3 VALUES LESS THAN ('2017-08-31')
)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1");
  • 使用PARTITION BY RANGE按日期分区,方便管理和查询历史数据。
  • 每个分区内部再做哈希分桶。

4. 数据导入方式

Doris支持多种导入数据的方法,常用的有:

4.1 Stream Load(快速导入小批量数据)

通过HTTP协议上传CSV文件,适合快速导入。

示例命令:

curl --location-trusted -u root:your_password \
-H "label:table1_20230518" \
-H "column_separator:," \
-T table1_data.csv \
http://fe_host:8030/api/example_db/table1/_stream_load
  • label是导入任务的唯一标识,避免重复导入。
  • column_separator指定列分隔符。

4.2 Insert语句导入

直接用SQL插入数据,适合少量数据或从其他表导入。

INSERT INTO table1 VALUES (1, 1, 'user1', 10);

或者从另一张表导入:

INSERT INTO table1 SELECT * FROM table2 WHERE event_day = '2017-07-01';

4.3 Broker Load(批量导入大数据)

适合从HDFS或对象存储批量导入Parquet、ORC等格式数据,适合海量数据加载。


5. 查询示例

Doris支持标准SQL查询,示例:

SELECT username, SUM(pv) AS total_pv
FROM table1
GROUP BY username
ORDER BY total_pv DESC
LIMIT 10;

该语句查询每个用户的pv总和,并按总pv降序取前10名。


6. 关键概念补充

  • 分区(Partition) :将数据按某个字段(如日期)划分成多个部分,方便管理和查询。
  • 分桶(Bucket) :在分区内部根据某个字段做哈希分桶,帮助数据均匀分布,提高查询效率。
  • Tablet:Doris中存储数据的最小物理单元,一个Tablet对应一个分桶。
  • 副本数(replication_num) :数据的备份数量,默认1,生产环境建议设置为3,保证数据安全。
  • AGGREGATE KEY表:支持对某些列自动聚合(如sum),适合统计类场景。

7. 分桶数量建议

合理设置分桶数量能提升性能,以下是参考建议:

表大小建议分桶数量
500MB4-8
5GB6-16
50GB32
500GB分区,每分区50GB,每分区16-32个分桶
5TB分区,每分区50GB,每分区16-32个分桶

每个Tablet大小建议控制在1-10GB之间,过小会增加管理开销,过大影响性能。


8. 完整示例:创建数据库、表,导入数据,查询

-- 创建数据库
CREATE DATABASE test_db;

-- 使用数据库
USE test_db;

-- 创建表
CREATE TABLE user_pv (
    user_id INT,
    username VARCHAR(32),
    pv BIGINT SUM DEFAULT 0
)
AGGREGATE KEY(user_id, username)
DISTRIBUTED BY HASH(user_id) BUCKETS 8
PROPERTIES("replication_num" = "3");

-- 插入数据
INSERT INTO user_pv VALUES (1, '张三', 100);
INSERT INTO user_pv VALUES (2, '李四', 150);

-- 查询数据
SELECT username, SUM(pv) AS total_pv
FROM user_pv
GROUP BY username
ORDER BY total_pv DESC;

通过以上步骤,你可以快速搭建Apache Doris环境,创建数据库和表,导入数据,并执行高效的SQL查询。Doris支持高并发、实时分析,适合构建实时数仓和大数据分析平台。

如果想了解更多细节和高级功能,可以参考官方文档和社区资源。祝你使用顺利!