Doris是一种MPP架构的分析型数据库,主要面向多维分析、数据报表、用户画像分析等场景。自带分析引擎和存储引擎,支持向量化执行引擎,不依赖其他组件,兼容MySQL协议。
Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程
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,用于接收请求 |
SHOW BACKENDS;
create user 'test' identified by 'test';
create database test_db;
grant all on test_dn to test;
第一级称为Partition
,即分区。用户指定某一维度列做为分区列(当前只支持整型和时间类型的列),并指定每个分区的取值范围。
第二级称为Distribution
,即分桶。用户可以指定一个或多个维度列以及桶数进行HASH分布。
# 带分区 建表
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");
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');
Rollup可以理解为表的一个物化索引结构。Rollup可以调整列的顺序以增加前缀索引的命中率,也可以减少key列以增加数据的聚合度。
以上面 3例子 为例子
DESC expamle_tbl ALL;
如果我们经常需要看某个城市的ip数,那么可以建立一个只有ip和city的rollup
alter table session_data add rollup rollup_city_ip(city,ip);
explain select ip from session_data where city= 'shanghai' ;
数据源 | 导入方式 |
---|---|
对象存储(s3),HDFS | 使用Broker导入数据 |
本地文件 | 导入本地数据 |
Kafka | 订阅Kafka数据 |
Mysql、PostgreSQL,Oracle,SQLServer | 通过外部表同步数据 |
通过JDBC导入 | 使用JDBC同步数据 |
导入JSON格式数据 | JSON格式数据导入 |
MySQL Binlog | Binlog Load |
我们不常用 详细操作请看 官方文档 这里
查看函数名
delete from test_tbl PARTITION p1 where k1 = 1;
show builtin functions in test_db;
执行表结构 变更的基本过程,是通过原 Index 的数据,生成一份新 表结构 的 Index 的数据。其中主要需要进行两部分数据转换,一是已存在的历史数据的转换,二是在表结构 变更 执行过程中,新到达的导入数据的转换。
ALTER TABLE tbl1
ADD COLUMN k4 INT default "1" to rollup1,
查看作业 ,取消作业
SHOW ALTER TABLE COLUMN;
CANCEL ALTER TABLE COLUMN FROM tbl_name;
详细操作请看 官方文档 这里
支持 根据 特定条件 进行 动态分区 也可以 创建 临时分区
例子 创建一张调度单位为天,不删除历史分区的动态分区表
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;
历史数据 写少读多 例如订单数据 15日自动签收 ,订单完成之后就相当于 历史固定数据 争对固定数据的 聚合操作 我们就可以开启分区缓存
详细操作请看 官方文档 这里
物化视图其实是 Rollup 的一个超集 ,Rollup 具有一定的局限性,它不能基于明细模型做预聚合。
详细操作请看 官方文档 这里
Apache Doris 向量化技术实现与后续规划
Doris 存储层设计介绍 1—— 存储结构设计解析
Doris 存储层设计介绍 2—— 写入流程、删除流程分析
Doris 存储层设计介绍 3—— 读取流程、Compaction 分析
Doris全面解析|Doris SQL 原理解析
Doris全面解析|Doris Compaction机制解析
Doris全面解析|Doris Stream Load原理解析
Doris全面解析|Apache Doris 索引机制解析
Doris 功能介绍-查询分析
Doris 功能介绍-导入分析
Doris 功能介绍-Proc 系统
Doris 功能介绍-Proc 系统-/dbs
Doris 功能介绍-Proc 系统-/statistic
Doris 功能介绍-List Partition
浅谈 Apache Doris FE 处理查询 SQL 源码解析
Doris FE源码解读系列之源码编译
【万字长文】Doris FE启动流程源码详细解析
聊聊 Apache Doris 的性能优化实战技巧
Apache Doris ARM 架构编译
Apache Doris Spark-Connecter实战
使用Doris HyperLogLog近似去重
基于Ansible实现Apache Doris快速部署运维指南
通过Nginx TCP反向代理实现Apache Doris负载均衡
Flink CDC 系列 - Flink CDC 如何简化实时数据入湖入仓
Apache Doris Oracle ODBC外表使用指南
Apache Doris Grafana监控指标介绍
Apache Doris 元数据运维
Apache Doris Bucket Shuffle Join 原理及使用
Apache Doris Colocate Join 原理及使用
Apache Doris SQL 日志审计
使用 Grafana + Promethus 监控Apache Doris
Flink 消费 Kafka实时写入 Apache doris(KFD)
基于Apache doris的元数据管理系统
ProxySQL实现Apache Doris FE高可用
Doris 最佳实践-Compaction调优(1)
Doris 最佳实践-Compaction调优(2)
Doris 最佳实践-Compaction调优(3)
应用实践|Lifewit 数据平台基于Apache Doris的建设实践
应用实践 | 物易云通基于 Apache Doris 的实时数据仓库建设
应用实践 | Apache Doris 在网易互娱的应用实践
特步集团基于 Apache Doris 的零售数据仓库项目实践
Apache Doris 在京东广告平台的应用
Apache Doris在京东双十一大促中的实践
京东物流基于 Doris 的亿级数据自助探索应用
Apache Doris物化视图与索引在京东的典型应用
Apache Doris 在京东客服 OLAP 中的应用实践
京东搜索实时 OLAP 探索与实践
《Apache Doris 在百度商业大规模微服务全链路监控的实践》
Doris在用户画像人群业务的应用
基于Doris构建的小程序私域流量增长
知乎用户画像与实时数据的架构与实践
基于Apache Doris的小米增长分析平台实践
Apache Doris 在小米集团的运维实践
美团外卖实时数仓建设实践
搜狐智能媒体数据仓库体系建设实践
Doris on ES在快手商业化的最佳实践
Apache Doris 在中仑网络的应用实践
Apache Doris在一点资讯自媒体平台的应用
新东方在线教育实时数仓的落地实践
Doris在作业帮实时数仓中的应用&实践
基于Doris的有道精品课数据中台建设实践
Apache Doris 在 WeLab实时大数据平台的应用实践
Apache Doris 在韵达物流领域的应用实践
Apache Doris在蜀海供应链的实践
Doris使用手册重磅来袭!(八万字纯干货,建议收藏)——上篇
Doris使用手册重磅来袭!(八万字纯干货,建议收藏)——下篇
源码阅读与解析系列课程配套课件(提取码 ku45)
Apache Doris 官方B站: https://space.bilibili.com/362350065/
Apache Doris 总体介绍
Apache Doris 基础概念入门
Apache Doris 1.0版本特性解析
Apache Doris 源码阅读与解析系列课程
Apache PMC Chair 陈明雨专访
Apache Doris存储层向量化改造设计与实现
Apache Doris 向量化技术实现与后续规划
Doris on ES的设计原理、技术实现与未来规划
Doris核心功能介绍—预聚合引擎和物化视图
Doris基于Hive表的全局字典设计与实现
Doris的数据导入机制以及原子性保证
Doris在韵达物流领域应用实践
Apache Doris 0.15 新特性解读和RoadMap
基于Iceberg拓展Doris数据湖能力的实践
尚硅谷与 Apache Doris 联合出品教程
黑马程序员与 Apache Doris 联合出品教程