当前位置: 首页 > news >正文

Apache Doris 快速学习大纲

1. 介绍

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

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

  1. Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
  2. Backend(BE),主要负责数据存储、查询计划的执行。
    在这里插入图片描述

入门

  • Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。

  • 在存储引擎方面,Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。

实例名称端口名称默认端口通讯方向说明
BEbe_port9060FE --> BEBE 上 thrift server 的端口,用于接收来自 FE 的请求
BEwebserver_port8040BE <–> BEBE 上的 http server 的端口
BEheartbeat_service_port9050FE --> BEBE 上心跳服务端口(thrift),用于接收来自 FE 的心跳
BEbrpc_port8060FE <–> BE, BE <–> BEBE 上的 brpc 端口,用于 BE 之间通讯
FEhttp_port8030FE <–> FE,用户 <–> FEFE 上的 http server 端口
FErpc_port9020BE --> FE, FE <–> FEFE 上的 thrift server 端口,每个fe的配置需要保持一致
FEquery_port9030用户 <–&gt; FEFE 上的 mysql server 端口
FEedit_log_port9010FE <–> FEFE 上的 bdbje 之间通信用的端口
Brokerbroker_ipc_port8000FE --> Broker, BE --> BrokerBroker 上的 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);

在这里插入图片描述


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.数据导入

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

相关文章:

  • FastFlow(5)---软件加速器 software accelerator
  • 华为OD:0019-0020:-最小步骤数—删除字符串中出现次数最少的字符
  • Python学生成绩管信息理系统(面向对象)(学生信息篇)
  • 国稻种芯百团计划行动 丰收节贸促会·袁隆平:水稻国际竞争
  • 面试精选:3、史上最详细的Linux精选面试题(二)
  • 2.21 haas506 2.0开发教程 - TTS - Text To Speech (320开发板)
  • Promethues-如何监控容器
  • 测试人生 | 从小团队的业务到独角兽的测开,涨薪超过60%,90后小哥哥凤凰涅槃了
  • 技术门槛高?来看 Intel 机密计算技术在龙蜥社区的实践
  • 532. 数组中的 k-diff 数对
  • 通过mybatis自定义参数类型转换器,进行数据库字段加密脱敏
  • Win10修复IPv6优先访问
  • 盘点市面上七款好用的代码加密混淆工具,你都用过哪款?
  • STC15单片机-按键检测单击或长按(外部中断)
  • 卷积神经网络工作原理图,图卷积神经网络原理
  • Android 架构优化~MVP 架构改造
  •  D - 粉碎叛乱F - 其他起义
  • Intervention/image 图片处理扩展包的安装和使用
  • Java程序员幽默爆笑锦集
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js写一个简单的选项卡
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • NSTimer学习笔记
  • Python十分钟制作属于你自己的个性logo
  • ReactNativeweexDeviceOne对比
  • scala基础语法(二)
  • vagrant 添加本地 box 安装 laravel homestead
  • Vue官网教程学习过程中值得记录的一些事情
  • 分享几个不错的工具
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 云大使推广中的常见热门问题
  • Hibernate主键生成策略及选择
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #pragma预处理命令
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)Thymeleaf用法——Thymeleaf简介
  • (状压dp)uva 10817 Headmaster's Headache
  • .net core Swagger 过滤部分Api
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 简单实现MD5
  • /etc/sudoer文件配置简析
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [Codeforces] number theory (R1600) Part.11
  • [dart学习]第四篇:函数
  • [Hibernate] - Fetching strategies
  • [leetcode]Flatten Binary Tree to Linked List