这是我参与「第四届青训营 」笔记创作活动的的第1天
课程内容
01 大数据体系
1.1 大数据体系
为什么先介绍SQL?
SQL简单,作为大数据框架对外提供统一接口。
One SQL rules big data all
1.2 SQL处理流程
1.2.1 parser
- 词法分析
如Flex
- 语法分析
如Bison
- parser的实现
parser的实现包括词法分析和语法分析。(eg.分布式计算系统实现项目中会涉及到)
1.2.1 Analyzer
left-deep-tree
对于JOIN算子,右边必须是一个表(SCAN算子)
1.2.3 查询优化-Optimizer和Executor
MySQL和PGSQL这种单机数据库对查询优化依赖不是很大。
大数据场景查询SQL很复杂,可能几千行SQL,有大量的Join操作,数据量很大,对查询优化依赖很大。
- 分布式场景下,优化后的逻辑计划图进行拆分,划分为Fragment或者Segment,分配到Node结点,每个结点分到执行计划一部分,得到一个分布式计划划分树。
- 拆分Fragments的目标是减小Node之间的IO(网络数据传输)(利用数据的物理分布,保证每个结点只读本地的数据)。
- Node之间执行计划的连接是通过Shuffle算子,一边发送,一边接收。不同Fragment之间的箭头。
- 并行执行:单机并行和多机并行。多机并行:本例中,同一个Fragemnt1有多个实例,读同一张表,Node1和Node2读取weblog表不同的数据达到并行。
1.2.4 小结
02 常见的查询优化器
2.1 查询优化器的分类
2.2 RBO的原理 基于规则的
2.2.1 关系代数
2.2.2 优化实例
- 列裁剪(减少数据的列)
- 谓词下推(减少数据的行)
- 创造新的过滤
- 高级的优化过滤
Runtime Filter: min-max(传给一个范围,如果范围过大且扫描数据集中不太好了), in-list(集合,如果集合元素个数很多就不太行了), bloom filter(集合固定大小,给定一个数,判断它在不在,扫描一次查一次)
2.2.3 小结
2.3 CBO的原理 基于代价的
2.3.1 统计信息
- 统计信息收集方式
-
- 方式一doris系统的语法
- 中间统计信息的推导
- 统计信息的问题
-
- 属性之间不是独立分布的选择率
2.3.2 执行计划枚举
- 求解子问题的局部最优解达到全局的最优解
- spark的优化例子
2.3.3 小结
2.2 总结
03 社区开源实践
3.1 查询优化器在社区的开源实践
3.2 Apache Calcite
\
3.3 小结
04 前沿
4.1 SQL引擎的前沿趋势
4.2 AI和DB结合
- AI4DB
- DB4AI
感觉会是一个很有趣的领域,以后自己可以尝试研究一下。
- 想起来去年12月份参加的学院做数据库系统的CP老师的讲座,现在回想起来才意识到AI4DB早就在做,牛!
此处为语雀内容卡片,点击链接查看:www.yuque.com/coderzhacai…
4.3 小结
\
05 总结
5.1 个人小结
- 了解了SQL处理的流程,先经过parser解析生成AST,AST经过Analyzer阶段生成逻辑计划图,下一步是Optimizer阶段,生成物理计划图,也是最重要的一步。最后是执行过程。SQL的优化,可以分为基于规则的、基于代价的。这些概念在数据库系统概念的课本也介绍过,但是描述过于概念化,缺少图文以及相关实例介绍,以至于在学习这个的时候没明白,今天老师通过详细的流程介绍对这些概念理解的更加清晰。
- 了解了查询优化器的应用的前沿动态,虽然这部分比较底层,但是还是可以知道RBO、CBO在各种查询优化器中得到应用。
- SQL引擎的的几个前沿优势,拓宽我的眼界,同时对未来的学习方向和就业方向也有了一定的启发。对我这种SQL BOY,了解一些深度学习,了解一些数据治理和数据中台的内容,打算学习Go,k8s,入门云原生,基于SQL以后说不定也大有可为,DB4AI看上去值得去学习研究一下。