Doris
Doris
基本概念
Doris 是基于 MPP 架构的交互式 SQL 数据仓库,主要用于解决近实时的报表和多维分析。
Doris 分成两部分 FE 和 BE ,FE 负责存储以及维护集群元数据、接收、解析、查询、设计规划整体查询流程,BE 负责数据存储和具体的实施过程。
在 Doris 的存储引擎中,用户数据被水平划分为若干个数据分片(Tablet,也称作数据分桶)。每个 Tablet 包含若干数据行。多个 Tablet 在逻辑上归属于不同的分区 Partition。一个 Tablet 只属于一个 Partition。而一个 Partition 包含若干个 Tablet。Tablet 是数据移动、复制等操作的最小物理存储单元。
原理解析
SQL解析
SQL解析在这篇文章中指的是将一条 sql 语句经过一系列的解析最后生成一个完整的物理执行计划的过程。
这个过程包括以下四个步骤:词法分析,语法分析,生成逻辑计划,生成物理计划。
词法分析:将字符串形式的 sql 识别成一个个 token,为语法分析做准备。
语法分析:语法分析主要负责根据语法规则,将词法分析生成的 token 转成抽象语法树(Abstract Syntax Tree)。

- 逻辑计划:逻辑计划负责将抽象语法树转换为代数关系。代数关系是一棵算子树,每个节点代表一种对数据的计算方式,整棵树代表了数据的计算方式和流动方向。

- 物理计划:物理计划是在逻辑计划的基础上,根据机器的分布,数据的分布,决定去哪些机器上执行哪些计算操作。Doris 系统的 SQL 解析也是采用这些步骤,只不过根据 Doris 系统结构的特点和数据的存储方式,进行了细化和优化,最大化发挥机器的计算能力。
设计目标
Doris SQL解析架构的设计有以下目标:
最大化计算的并行性
最小化数据的网络传输
最大化减少需要扫描的数据
总体架构
Doris SQL解析具体包括了五个步骤:词法分析,语法分析,生成单机逻辑计划,生成分布式逻辑计划,生成物理执行计划。
具体代码实现上包含以下五个步骤:Parse, Analyze, SinglePlan, DistributedPlan, Schedule。

Parse 阶段本文不详细讲,Analyze 负责对 AST 进行前期的一些处理,SinglePlan 根据 AST 进行优化生成单机查询计划,DistributedPlan 将单机的查询计划拆成分布式的查询计划,Schedule 阶段负责决定查询计划下发到哪些机器上执行。
注:AST 抽象语法树 Abstract Syntax Tree
由于SQL类型有很多,本文侧重介绍查询 SQL 的解析。
下图展示了一个简单的查询 SQL 在 Doris 的解析实现。

Parse阶段
词法分析采用 jflex 技术,语法分析采用 java cup parser 技术,最后生成抽象语法树(Abstract Syntax Tree)AST,这些都是现有的、成熟的技术,在这里不进行详细介绍。
AST 是一种树状结构,代表着一条 SQL。不同类型的查询 select, insert, show, set, alter table, create table 等经过 Parse 阶段后生成不同的数据结构(SelectStmt, InsertStmt, ShowStmt, SetStmt, AlterStmt, AlterTableStmt, CreateTableStmt等),但他们都继承自 Statement,并根据自己的语法规则进行一些特定的处理。例如:对于 select 类型的 sql,Parse 之后生成了 SelectStmt 结构。
SelectStmt 结构包含了 SelectList,FromClause,WhereClause,GroupByClause,SortInfo等结构。这些结构又包含了更基础的一些数据结构,如 WhereClause 包含了 BetweenPredicate(between表达式),BinaryPredicate(二元表达式),CompoundPredicate(and-or组合表达式),InPredicate(in表达式)等。
AST 中所有结构都是由基本结构表达式 Expr 通过多种组合而成,如下图所示。

Analyze阶段
文档勘误
- 透明 -> 不透明

- 一下 -> 以下

Doris的更多相关文章
- doris 0.9.0版本docker镜像制作与使用
1. 安装docker 详情请参见本人博客 2. 编译doris 详情请参见doris官网文档 3. 在编译好的doris output文件夹下编写两个Dockerfile 3.1 Dockerfi ...
- Doris与Hadoop yarn混合部署遇到的坑
Doris默认端口 Yarn 默认端口: 如图,端口冲突,在混合部署的情况下,会出现2个问题: 1. Yarn ResourceManager启动不起来 解决办法:修改yarn.resourceman ...
- Doris FE负载均衡配置
0 背景概述 Doris完全兼容了mysql协议,并且Doris FE本身通过多follower选举机制选举出master,可以保证fe本身的高可用性,也可以通过加入observer fe节点来提高f ...
- Apache Doris通过supervisor进行进程管理
下面一段文字是摘自doris官方文档:注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor.如需使用守护进程启动,需要修改各个 start_xx.s ...
- CentOS 上使用vscode 调试百度大数据分析框架Apache Doris BE
A: 前期准备工作 1. 安装vscode,详细请参见vscode官网https://code.visualstudio.com/docs/setup/linux,摘要如下: sudo rpm --i ...
- [转]Apache Doris资料汇总
参考资料 https://www.toutiao.com/i6709706901770207748/?tt_from=weixin&utm_campaign=client_share& ...
- doris: shell invoke .sql script for doris and passing values for parameters in sql script.
1. background in most cases, we want to execute sql script in doris routinely. using azkaban, to l ...
- build doris 0.11.5 on centos 7/ubuntu
doris has envolved many thirdparty components since v0.9. so the build progress has changed a lot si ...
- 本周六 Apache DolphinScheduler & Doris 将联合线上 Meetup
活动背景 2020年,大数据成为国家基建的一个重要组成,大数据在越来越多的领域展现威力.随着大数据的应用场景越来越多,大家对数据的响应速度和数据加工工作流的方便程度也提出了更高的要求.在这种背景下,相 ...
- DORIS系统概述
DORIS(Doppler Orbitography and Radio-positioning Integrated by Satellite)(多普勒轨道学与无线电定位集成卫星),它是由法国Cne ...
随机推荐
- MySQL锁(三)行锁:幻读是什么?如何解决幻读?
概述 前面两篇文章介绍了MySQL的全局锁和表级锁,今天就介绍一下MySQL的行锁. MySQL的行锁是各个引擎内部实现的,不是所有的引擎支持行锁,例如MyISAM就不支持行锁. 不支持行锁就意味着在 ...
- css进阶 04-如何让一个元素水平垂直居中?
04-如何让一个元素水平垂直居中? #前言 老板的手机收到一个红包,为什么红包没居中? 如何让一个子元素在父容器里水平垂直居中?这个问题必考,在实战开发中,也应用得非常多. 你也许能顺手写出好几种实现 ...
- [日常摸鱼]bzoj4802 欧拉函数-PollardRho大整数分解算法
啊居然要特判,卡了好久QAQ (好像Windows下的rand和Linux下的不一样? QwQ一些东西参考了喵铃的这篇blog:http://www.cnblogs.com/meowww/p/6400 ...
- [水题日常]UVA1639 糖果(Candy,ACM/ICPC Chengdu 2012)
今天来尝试了几道数学期望相关的题,这是我认为比较有趣的一道题 这次不废话啦直接开始~ 一句话题意:两个分别装有n个糖果的盒子,每次随机选一个盒子然后拿走一颗糖(选的概率分别是\(p\)和\((1-p) ...
- layui的基本使用
打开官网https://www.layui.com/下载这个框架 官网首页 下载到 layui 的最新版,它经过了自动化构建,更适合用于生产环境.目录结构如下 ├─css //css目录 │ │─mo ...
- Web服务器-正则表达式-小例子(3.1.2)
@ 目录 1.邮箱 2.手机号码 关于作者 1.邮箱 import re def main(): email = input("请输入一个邮件地址:") ret = re.matc ...
- 【Git】命令思维导图
Git命令思维导图
- win10新版wsl2使用指南
本篇文章会介绍win10中wsl2的安装和使用以及遇到的常见问题比如如何固定wsl2地址等问题的总结. 一.wsl2简介 wsl是适用于 Linux 的 Windows 子系统,安装指南:适用于 Li ...
- Python面向对象:封装和多态
一.封装 封装是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别. 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进 ...
- http详解笔记
http详解笔记 http,(HyperText Transfer Protocol),超文本传输协议,亦成为超文本转移协议 通常使用的网络是在TCP/IP协议族的基础上运作的,HTTP属于它的一 ...