赞
踩
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查看执行计划,是否使用到了rollup
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 具有一定的局限性,它不能基于明细模型做预聚合。
详细操作请看 官方文档 这里
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。