这是我参与「第四届青训营 」笔记创作活动的的第1天
1. 大数据体系和SQL
SQL:较流行,系统支持
Parser : String -> AST (拆分字符串 -> token -> AST node -> AST)
Analyzer : AST -> Logical Plan (逻辑描述)
Plan Fragment : 最小化; Shuffle算子
Executor : 单机/多机并行
查询优化 :代价最小; Physical plan
2. 常见的查询优化器
RBO (Rule-based Optimizer) : 基于启发式规则
-
关系代数
结合律, 交换律, 传递性
-
优化规则
优化速度,优化网络, 优化内存
列裁剪 : 不需要读取某些列的时候,将列去除
谓词下推 :(where中的表达式叫谓词)减少数据处理量
传递闭包
Runtime Filter(过滤) : min-max(缺点:数据集中), in-list(适合数据较少;缺点:个数过多时不便), bloom filter(固定大小)
CBO (Cost-based Optimizer) : 代价最小
概念:用模型估算执行计划的代价(所有算子代价之和),minimize
journey
title 流程
统计学信息+推导规则: 5
计算算子代价: 5
计算执行计划代价: 5
执行计划枚举: 5
-
统计信息
选择率:返回数据比例
基数: 算子需要处理的行数
收集方式:DDL指定;手动执行;动态采样
-
推导规则:假设列之间是独立的,列的值是均匀分布(不符合实际)
Filter Selectivity
-
执行计划枚举
贪心算法或动态规划选出最优执行计划
结论:总体性能提升
3. 社区开源实践
-
Apache Calcite概览
统一的SQL查询引擎;RBO + CBO
-
Calcite RBO
HepPlanner: 优化规则(100+);基于经验,不保证最优;匹配规则
-
Calcite CBO
基于Volcano/Cascade框架;成本最优假设;等价计划集合(group);Top-down动态规划搜索;Memo
VolcanoPlanner : group winner;剪枝(减少搜索空间)
4. 前沿趋势
引擎架构的进化:存储计算分离;一体化(HTPA,HASP,HTSAP)
Cloud:云原生(K8S)
湖仓一体:数据仓库 + 数据湖
DATA+AI:AI4BD(自配置,自诊断和自愈合,自优化);DB4AI(内嵌人工智能算法,内嵌机器学习框架)