1. 介绍
Doris是一种MPP架构的分析型数据库,主要面向多维分析、数据报表、用户画像分析等场景。自带分析引擎和存储引擎,支持向量化执行引擎,不依赖其他组件,兼容MySQL协议。
Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程
- Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
- Backend(BE),主要负责数据存储、查询计划的执行。
入门
-
Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。
-
在存储引擎方面,Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
BE | be_port | 9060 | FE --> BE | BE 上 thrift server 的端口,用于接收来自 FE 的请求 |
BE | webserver_port | 8040 | BE <–> BE | BE 上的 http server 的端口 |
BE | heartbeat_service_port | 9050 | FE --> BE | BE 上心跳服务端口(thrift),用于接收来自 FE 的心跳 |
BE | brpc_port | 8060 | FE <–> BE, BE <–> BE | BE 上的 brpc 端口,用于 BE 之间通讯 |
FE | http_port | 8030 | FE <–> FE,用户 <–> FE | FE 上的 http server 端口 |
FE | rpc_port | 9020 | BE --> FE, FE <–> FE | FE 上的 thrift server 端口,每个fe的配置需要保持一致 |
FE | query_port | 9030 | 用户 <–> FE | FE 上的 mysql server 端口 |
FE | edit_log_port | 9010 | FE <–> FE | FE 上的 bdbje 之间通信用的端口 |
Broker | broker_ipc_port | 8000 | FE --> Broker, BE --> Broker | Broker 上的 thrift server,用于接收请求 |
1.查看BE,创建账号,数据库 ,赋予用户权限
SHOW BACKENDS;
create user 'test' identified by 'test';
create database test_db;
grant all on test_dn to test;
2.表分区分区
第一级称为Partition
,即分区。用户指定某一维度列做为分区列(当前只支持整型和时间类型的列),并指定每个分区的取值范围。
第二级称为Distribution
,即分桶。用户可以指定一个或多个维度列以及桶数进行HASH分布。
- 有时间维或类似带有有序值的维度,可以以这类维度列作为分区列。分区粒度可以根据导入频次、分区数据量等进行评估。
- 历史数据删除需求:如有删除历史数据的需求(比如仅保留最近N天的数据)。使用复合分区,可以通过删除历史分区来达到目的。也可以通过在指定分区内发送DELETE于禁进行删除。
- 解决数据倾斜的问题:每个分区可以单独指定分桶数量。如按天分区,当每天的数据量差异很大的时,可以通过指定分区的分桶数,合理规划不同分区的数据,分桶列建议选择区分度大的列。
# 带分区 建表
CREATE TABLE student2
(
dt DATE,
id INT,
name VARCHAR(50),
age INT,
count BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY (dt,id,name,age)
PARTITION BY RANGE(dt)
(
PARTITION p202007 VALUES LESS THAN ('2020-08-01'),
PARTITION p202008 VALUES LESS THAN ('2020-09-01'),
PARTITION p202009 VALUES LESS THAN ('2020-10-01')
)
DISTRIBUTED BY HASH(id) buckets 10
PROPERTIES("replication_num" = "1");
3.数据模型
AGGREGATE KEY
相同时,新旧记录将会进行聚合操作,目前支持SUM,MIN,MAX,REPLACE。UNIQUE KEY
新记录覆盖旧记录。DUPLICATE KEY
只指定排序列,相同的行并不会合并。适用于数据无需提前聚合的分析业务。
1例子
CREATE TABLE sales_order
(
orderid BIGINT,
status TINYINT,
username VARCHAR(32),
amount BIGINT DEFAULT '0'
)
UNIQUE KEY(orderid)
DISTRIBUTED BY HASH(orderid) BUCKETS 10;
insert into sales_order values(1,1,'name1',100);
insert into sales_order values(1,1,'name1',200);
2例子
CREATE TABLE sales_order
(
orderid BIGINT,
status TINYINT,
username VARCHAR(32),
amount BIGINT DEFAULT '0'
)
UNIQUE KEY(orderid)
DISTRIBUTED BY HASH(orderid) BUCKETS 10;
insert into sales_order values(1,1,'name1',100);
insert into sales_order values(1,1,'name1',200);
3例子
CREATE TABLE session_data
(
visitorid SMALLINT,
sessionid BIGINT,
city CHAR(20),
ip varchar(32)
)
DUPLICATE KEY(visitorid, sessionid)
DISTRIBUTED BY HASH(sessionid, visitorid) BUCKETS 10;
insert into session_data values(1,1,'shanghai','www.111.com');
insert into session_data values(1,1,'shanghai','www.111.com');
insert into session_data values(3,2,'shanghai','www.111.com');
insert into session_data values(2,2,'shanghai','www.111.com');
insert into session_data values(2,1,'shanghai','www.111.com');
4.Rollup
Rollup可以理解为表的一个物化索引结构。Rollup可以调整列的顺序以增加前缀索引的命中率,也可以减少key列以增加数据的聚合度。
以上面 3例子 为例子
DESC expamle_tbl ALL;
如果我们经常需要看某个城市的ip数,那么可以建立一个只有ip和city的rollup
alter table session_data add rollup rollup_city_ip(city,ip);
通过explain查看执行计划,是否使用到了rollup
explain select ip from session_data where city= 'shanghai' ;
5.数据导入
- Broker load (通过Broker进程访问并读取外部数据源(HDFS)导入Doris。用户通过MySql协议提交导入作业后,异步执行。通过show load命令查看导入结果。)
- Stream load (用户通过HTTP协议提交请求并携带原始数据创建导入。主要用于快速将本地文件或数据流中的数据导入到Doris。导入命令同步返回导入结果。)
- Insert (类似MySql中的insert语句,Doris提供insert into tbl select …;的方式从Doris的表中读取数据并导入到另一张表。或者通过insert into tbl values(…);的方式插入单条数据) 官方生产不建议
- Multi load (用户可以通过HTTP协议提交多个导入作业。Multi Load可以保证多个导入作业的原子生效)
- Routine load (用户通过MySql协议提交例行导入作业,生成一个常住线程,不间断的从数据源(如Kafka)中读取数据并导入Doris中)
数据源 | 导入方式 |
---|---|
对象存储(s3),HDFS | 使用Broker导入数据 |
本地文件 | 导入本地数据 |
Kafka | 订阅Kafka数据 |
Mysql、PostgreSQL,Oracle,SQLServer | 通过外部表同步数据 |
通过JDBC导入 | 使用JDBC同步数据 |
导入JSON格式数据 | JSON格式数据导入 |
MySQL Binlog | Binlog Load |
6.数据导出
我们不常用 详细操作请看 官方文档 这里
7.SQL函数
7.删除数据
delete from test_tbl PARTITION p1 where k1 = 1;
show builtin functions in test_db;
进阶使用
1.表结构变更
执行表结构 变更的基本过程,是通过原 Index 的数据,生成一份新 表结构 的 Index 的数据。其中主要需要进行两部分数据转换,一是已存在的历史数据的转换,二是在表结构 变更 执行过程中,新到达的导入数据的转换。
ALTER TABLE tbl1
ADD COLUMN k4 INT default "1" to rollup1,
查看作业 ,取消作业
SHOW ALTER TABLE COLUMN;
CANCEL ALTER TABLE COLUMN FROM tbl_name;
详细操作请看 官方文档 这里
2. 表分区
支持 根据 特定条件 进行 动态分区 也可以 创建 临时分区
例子 创建一张调度单位为天,不删除历史分区的动态分区表
create table student_dynamic_partition1
(id int,
time date,
name varchar(50),
age int
)
duplicate key(id,time)
PARTITION BY RANGE(time)()
DISTRIBUTED BY HASH(id) buckets 10
PROPERTIES(
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "10",
"replication_num" = "1"
);
查看分区表情况
show partitions from student_dynamic_partition1;
查看表下的所有分区
show partitions from student_dynamic_partition1;
3.分区缓存
历史数据 写少读多 例如订单数据 15日自动签收 ,订单完成之后就相当于 历史固定数据 争对固定数据的 聚合操作 我们就可以开启分区缓存
详细操作请看 官方文档 这里
4.Join 优化
5.物化视图
物化视图其实是 Rollup 的一个超集 ,Rollup 具有一定的局限性,它不能基于明细模型做预聚合。
详细操作请看 官方文档 这里
6.Broker进阶
7. 生态扩展
- 扩展表 (例如 odbc mysql 外表)
- Mysql to Doris ( 自动化全库创建doris odbc 表)
- Flink Doris cdc (flink 生态,cdc)
学习资料
技术解析:
Doris 存储层设计介绍 3—— 读取流程、Compaction 分析
Doris全面解析|Doris Compaction机制解析
Doris全面解析|Doris Stream Load原理解析
浅谈 Apache Doris FE 处理查询 SQL 源码解析
实战系列:
Apache Doris Spark-Connecter实战
基于Ansible实现Apache Doris快速部署运维指南
通过Nginx TCP反向代理实现Apache Doris负载均衡
Flink CDC 系列 - Flink CDC 如何简化实时数据入湖入仓
Apache Doris Oracle ODBC外表使用指南
Apache Doris Bucket Shuffle Join 原理及使用
Apache Doris Colocate Join 原理及使用
使用 Grafana + Promethus 监控Apache Doris
Flink 消费 Kafka实时写入 Apache doris(KFD)
用户案例:
应用实践|Lifewit 数据平台基于Apache Doris的建设实践
应用实践 | 物易云通基于 Apache Doris 的实时数据仓库建设
应用实践 | Apache Doris 在网易互娱的应用实践
特步集团基于 Apache Doris 的零售数据仓库项目实践
Apache Doris 在京东客服 OLAP 中的应用实践
《Apache Doris 在百度商业大规模微服务全链路监控的实践》
Apache Doris 在 WeLab实时大数据平台的应用实践
教程手册:
Doris使用手册重磅来袭!(八万字纯干货,建议收藏)——上篇
Doris使用手册重磅来袭!(八万字纯干货,建议收藏)——下篇
源码阅读与解析系列课程配套课件(提取码 ku45)
视频资料
Apache Doris 官方B站: https://space.bilibili.com/362350065/
Apache Doris 0.15 新特性解读和RoadMap