Apache Doris 快速学习大纲

1. 介绍

Doris是一种MPP架构的分析型数据库,主要面向多维分析、数据报表、用户画像分析等场景。自带分析引擎和存储引擎,支持向量化执行引擎,不依赖其他组件,兼容MySQL协议。

Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程

  1. Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
  2. Backend(BE),主要负责数据存储、查询计划的执行。
    Apache Doris 快速学习大纲_第1张图片

入门

  • 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分布。

  1. 有时间维或类似带有有序值的维度,可以以这类维度列作为分区列。分区粒度可以根据导入频次、分区数据量等进行评估。
  2. 历史数据删除需求:如有删除历史数据的需求(比如仅保留最近N天的数据)。使用复合分区,可以通过删除历史分区来达到目的。也可以通过在指定分区内发送DELETE于禁进行删除。
  3. 解决数据倾斜的问题:每个分区可以单独指定分桶数量。如按天分区,当每天的数据量差异很大的时,可以通过指定分区的分桶数,合理规划不同分区的数据,分桶列建议选择区分度大的列。
# 带分区 建表
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.数据模型

  1. AGGREGATE KEY 相同时,新旧记录将会进行聚合操作,目前支持SUM,MIN,MAX,REPLACE。
  2. UNIQUE KEY 新记录覆盖旧记录。
  3. 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);

Apache Doris 快速学习大纲_第2张图片


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);

Apache Doris 快速学习大纲_第3张图片


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');

Apache Doris 快速学习大纲_第4张图片

4.Rollup

Rollup可以理解为表的一个物化索引结构。Rollup可以调整列的顺序以增加前缀索引的命中率,也可以减少key列以增加数据的聚合度。

以上面 3例子 为例子

DESC expamle_tbl ALL;

Apache Doris 快速学习大纲_第5张图片
如果我们经常需要看某个城市的ip数,那么可以建立一个只有ip和city的rollup

alter table session_data add rollup rollup_city_ip(city,ip);

Apache Doris 快速学习大纲_第6张图片
通过explain查看执行计划,是否使用到了rollup

explain select ip from session_data where city= 'shanghai' ;

Apache Doris 快速学习大纲_第7张图片

5.数据导入

  1. Broker load (通过Broker进程访问并读取外部数据源(HDFS)导入Doris。用户通过MySql协议提交导入作业后,异步执行。通过show load命令查看导入结果。)
  2. Stream load (用户通过HTTP协议提交请求并携带原始数据创建导入。主要用于快速将本地文件或数据流中的数据导入到Doris。导入命令同步返回导入结果。)
  3. Insert (类似MySql中的insert语句,Doris提供insert into tbl select …;的方式从Doris的表中读取数据并导入到另一张表。或者通过insert into tbl values(…);的方式插入单条数据) 官方生产不建议
  4. Multi load (用户可以通过HTTP协议提交多个导入作业。Multi Load可以保证多个导入作业的原子生效)
  5. 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. 生态扩展

  1. 扩展表 (例如 odbc mysql 外表)
  2. Mysql to Doris ( 自动化全库创建doris odbc 表)
  3. Flink Doris cdc (flink 生态,cdc)

学习资料

技术解析:

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 联合出品教程

你可能感兴趣的:(大数据,apache,学习,java)