SQL

232 阅读5分钟

集训

2022の夏天,半壶水响叮当的我决定充实一下自我


一、内容介绍

    青训营


二、SQL简介

    简介:分析引擎入口
有MysQL、oracle之类使用SQL 作为交互语言的数据库有JDBC、ODBC之类和各种数据库交互的标准接口
有大量数据科学家和数据分析师等不太会编程语言但又要使用数据的人多个大数据计算引擎都支持 SQL作为更高抽象层次的计算入口
image.png image.png


三、实现

3.1.Parser

思想:转AST(抽象语法树,结点)输出
    (1)AST树:SelectList列表(列信息),FromClause数据库(库与表),WhereClause条件(between.in,like条件),Group by聚合组,Order序,limit显示...
    (2)词法分析,语法分析,实现,(递归最难)
image.png

3.2.Analyzer

思想:输出逻辑计划Logical plan
    (1)逻辑树从下往上,边为数据流向
    (2)遍历树,输入到输出,下到上,集合性运行命令组
image.png

3.3.Optimizer优化器(重点)

思想:输出物理逻辑计划Physical plan
    (1)必要的规律性总结
    (2)要点1:分布式系统中,结点处理读本地数据,不要远程(最小网络化数据传输,物理分布,数据亲和性)
    (3)结点连接交互:Shuffle算子,一边发送一边接受,1.拆分Plan Fragment,2.发送给结点执行,3.Executor利用并行机制进行单机或多机并行
image.png image.png

3.4.Executor(每个结点)

思想:执行,处理数据,返回用户
    (1)结点链接:Shuffle算子,一边发送一边接受,1.拆分Plan Fragment,2.发送给结点执行,3.Executor利用并行机制进行单机或多机并行
    (2)单机cache(CBUcache中间层),pipeline(流水线乱序执行),SIMD(一条指令处理多个数据)
    (3)多机,拆分,排队论??

3.5.小结

image.png

四、Optimizer优化器(重点)

4.1.查询优化器分类

(1)RBO:
    基于规则的优化方式 (Rule-Based Optimization)
(2)CBO:
    基于代价的优化方式 (Cost-Based Optimization)
image.png


4.2.RBO预估模型

    优化前:
        数据库 / 表 (笛卡尔积)-> 限制笛卡尔积 -> 限制笛卡尔积结果 -> 选列表(列信息)
image.png

优化类型:
(1)I/O 输入优化,读少,快
(2)Network 网络传输少,快
(3)CPU & Memory , CPU指令少 ,内存需求少
image.png


(4)四种优化:(从上往下)
    1.列裁剪:不需要的列去掉,减少不必要I/O
    2.谓词下推:条件P深度下推至叶子,尽早剔除(有限制,如无)
    3.传递闭包:条件P广度旁推满足(传递包)叶子
    4.Runtime Filter:将join(笛卡尔积,哈希表)步骤尽可能上移,预处理数据特征min-max(致密数据,区间)/in-list(稀疏数据,list表)/bloom fillter(是否在),使得哈希表一次成功不会哈希冲突

image.png


4.2小结

缺点:

1.遍历顺序索引或随机
2.物理实现:哈希join 还是 归并join
3.哈希join小表判别,与链接顺序
image.png image.png


4.3.CBO预估模型

概念:

image.png

image.png

统计信息:num nulls缺失值nan;num distinct value数据去重;histogram高斯直方图

本质:概率学累计每个算子 权重 并规划路线

方式
1.定义收集,实时更新,插入变慢
2.手动更新,可能与当前不符
3.动态采样,额外手动命令,非定义
image.png

4.3.1 CBO统计信息操作

推导规则(前提假设列和列之间独立,列的值是均匀分布):

AND条件: fs(a AND b) = fs(a) * fs(b)
OR条件: fs(a OR b) = fs(a) + fs(b) - (fs(a) * fs(b))
NOT条件: fs(NOT a) = 1.0- fs(a)
等于条件(x = literal) literal < min && literal > max: 0 V1/NDV
小于条件 (x < literal) literal < min: 0 literal > max: 1 (literal - min) / (max - min)
image.png

常用:贪心算法,动态规划找最优,在一定前提(如唯一),下查找概率的 权重(含有量),然后数学规划
贪心原因:无法精确计算,后续步骤无法估量概率性,所以只能当前步骤最优解,以最大化速度下降,以操作数量*概率为cost,累和等权重cost,比较线路和
概率特征:时间需求越长,提升越明显

4.3.2小结

image.png

4.3.小结

image.png

五.社区

5.1总览

image.png

5.2Apache Calcite

查询优化器
解析Calcite,优化,执行计划
具体执行交给其他
多种数据模型:关系型,半结构化,流式,地理空间数据
内置RBO,CBO

JDBC Client发送客户端
Data Processing System 外接具体执行,数据处理系统(TPS电子数据处理系统,Flink分布式大数据处理引擎)

JDBC Server数据处理,SQL Parser/Validator数据检验解析语法树,Operator Expressions 语法树转 关系表达式算子
Expressions Builder其他语言转译为 关系表达式算子
Query Optimizer 核心查询优化器,关系表达式算子 与 Metadata Providers统计信息(CBO) 与 Pluggable Rules插件适用系统规则(RBO)

image.png

    Calcite 的RBO
思想:遍历,匹配规则,等价替换,直到rule无法匹配
缺点:无法最优

image.png

image.png

    Calcite 的CBO
VolcanoPlanner,应用rule候选计划
image.png 1.Memo 动态规划时间成本数据表
2.Group 等价关系表达式算子, 如join--哈希表,归并
image (1).png 2.Group 采用等价计划集合,共享子树,减少开销,本质:AND/OR graph image (2).png 3.目标函数:Group Winner image (3).png 4.剪枝(Branch-and-bound pruning ):减少搜索空间,减少交换结合律带来不必要空间 image (4).png Group Winner: image (6).png

5.3 小结

image.png

六.前沿趋势

image.png

概览: image.png AI对数据库:大数据提前扩仓,自我修复牵引,查询优化器,代价预估,AI索引视图 数据库对AI:内嵌,数据库做机械学习数据学习仓 image.png

七.SQL总结

image.jpeg

晚安玛卡巴卡

快乐暑假