这是我参与「第四届青训营 」笔记创作活动的第5天
课堂笔记
一、本堂课重点内容:
- 介绍了大数据体系框架以及sql的执行流程
- 讲解如何对sql查询进行优化,重点讲解RBO,CBO
- 介绍优化器的开源实践,以Apache Calcite为例
- 介绍Sql引擎趋势发展,重点介绍DB和AI的结合
二、详细知识点介绍:
1.一条SQL语句的执行流程
当用户输入一条sql语句并执行后,要经过Parser,Analyzer,Optimizer,Excutor等阶段。
- parser阶段对sql语句进行词法分析和语法分析得到AST抽象语法树,词法分析主要是拆分字符串得到字符串常量,运算符号等Token。
- Analyzer阶段主要是检查并绑定元信息如表信息、列信息等;并进行合法性检查;最后生成描述sql分步骤计算的逻辑执行计划。
- Optimizer主要是对生成的逻辑执行计划进行优化,找到一个正确执行且代价最小的物理执行计划。
- 最后Excutor就是具体执行物理计划,可以单机并行,多机并行计算等。
2.查询优化器的介绍
重点介绍CBO,RBO两种查询优化器。
- CBO(Cost-based Optimizer) :主要是使用一个模型估算执行计划的代价,选择代价最小的执行计划;而执行计划的代价可以转为所有算子的执行代价之和。
- RBO(Rule-based Optimizer):主要是基于规则进行优化,包括列裁剪,谓词下推,传递闭包等几百条基于经验归纳得到的优化规则。
3.开源框架 Apache Calcite介绍
其主要特点为有统一的SQL查询引擎、支持异构数据模型、内置RBO、CBO等优化器
- 通过HepPlanner组件实现RBO;包括100+的优化规则,四种匹配规则等。其优化特点是优化速度快,实现简单,但不保证最优。
- 通过VolcanoPlanner实现CBO;包括共享子树减少内存开销、剪枝减少搜索空间等。
4.未来技术展望
主要包括以下几个方面
- 引擎架构进化,如存储计算分离
- Cloud云原生
- 湖仓一体
- Data + AI
其中DATA + AI即把大数据与人工智能结合起来,以后可能会借助机器学习算法来自动调参,自动优化查询计划; 以及在人工智能领域内嵌SQL语言。
三、实践练习例子:
谓词下推的实践例子
如图所示sql原先是先jin生成表之后再进行过滤
经过谓词下推后变为如下先过滤再jin生成新表,可以大大减少join的数据量
四、课后个人总结:
通过这节课对SQL的底层执行计划加深了了解。其中RBO的一些优化规则,加CBO的底层原理不好理解,需要多多巩固复习加深理解。