大数据体系和SQL
1.1大数据体系
SQL已经成为实时处理的接口,并且比c语言简单易用,最终目标SQL处理所有大数据
1.2大数据体系和SQL
1.3SQL的处理流程
sql的基本流程
解析
1.Parser(分析):
string》》AST(abstract syntax tree)
词法分析:拆分字符串的到token(key,数值常量,字符串常量,运算符)
语法分析:将token组成AST node,组合成完整的AST
2.Analyzer和Logical Plan
3.查询优化
Physical Plan 和 Excutor
01总结
常见的查询优化器
- top-down optimizer:从输出目标开始,自上而下遍历计划树,找最完整最优的执行计划
- bottom-up optimizer:从零开始,自下而上,寻找最完整的执行计划
- RBO(Rule-based Optimizer):根据关系代价等价语义,重写查询,启发式规则,会访问元数据但不会涉及具体表数据
- CBO(Cost-based Optimizer):使用模型估算执行计划的代价,选择代价最小的执行计划
RBO-关系代数
- 运算符:select(σ),project(π),join(∩),rename(ρ),union(∪)
- 等价变换:结合律,交换律,传递性
RBO—优化原则
优化I/O 优化Network 优化CPU或Memory、
RBO的几种优化
RBO总结
- 主流的RBO实现一般都有几百条基于经验归纳得到的优化规则
- 优点:简单,速度快
- 缺点:不保证得到最优执行计划
COB-概念
COB-统计信息
COB-信息收集方式
COB-统计信息推导规则
CBO统计信息的问题
CBO总结
- CBO使用代价模型和统计估算执行计划的代价
- CBO使用贪心和动态算法找最优解
02总结
- RBO都有几百条规则经验得到优化规则
- RBo简单,快速,但是可能得不到最优解
- CBO能找到最优解,使用代价模型和统计信息来估算代价
社区开源实践
Apache Calcite:
- 统一的SQL查询引擎
- 模块化,插件化,稳定可靠
- 支持异常结构的数据模型
- 内置RBO和CBO
calcite RBO
- HepPlanner
- 优化规则(Rule)
- Pattern:匹配表达树
- 等价变换:得到新的表达式
- 内置一百多个优化规则
- 四个匹配机制:深度,拓扑,BOTTOM_UP,TOP_DOWN
- 遍历所有rule,知道所有被遍历
- 优化速度快,简单,但是不是最优
calcite CBO
- VolcanoPlanner
- 基于Volcano/Cascade框架
- 最优假设
- Memo:存储候选执行计划
-
- 本质:AND/OR graph
-
- 共享树减少内存开销
- Group:等价计划集合
-
-
Group winner:目前最优计划
-
- Top-DOWN:动态搜索,
-
选择winner构建执行最有计划
- 应用Rule搜索候选计划
前沿趋势
- 引擎架构的进化
计算存储分离(干湿分离) 一体化(HTAP,HSAP,HTSAP)
- Cloud
云原生,serverless
- 湖仓一体
Query Federation
- DATA+AL
AL4DB
- 自配置
-
智能调参(OtterTune,QTune) -
负载均衡和调度
- 自诊断和自愈合:错误恢复和迁移
- 自优化
-
统计信息估计 -
代价估计 -
学习型优化器 -
索引/视图推荐
DB4AL
- 内嵌人工智能算法(MLSQL,SQLFlow)
- 内嵌机器学习框架(SparkML,Alink,dl-on-flink)
小结
- SQL不可或缺
- 引擎架构进化,云原生,湖仓一体对SQL查询优化器有新的要求和挑战
- AI加持,学习型查询优化器在不断进化