SQL浅析 | 青训营笔记

123 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第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) : 基于启发式规则

  1. 关系代数

    结合律, 交换律, 传递性

  2. 优化规则

    优化速度,优化网络, 优化内存

    列裁剪 : 不需要读取某些列的时候,将列去除

    谓词下推 :(where中的表达式叫谓词)减少数据处理量

    传递闭包

    Runtime Filter(过滤) : min-max(缺点:数据集中), in-list(适合数据较少;缺点:个数过多时不便), bloom filter(固定大小)

CBO (Cost-based Optimizer) : 代价最小

概念:用模型估算执行计划的代价(所有算子代价之和),minimize
   journey
   title 流程
   统计学信息+推导规则: 5
   计算算子代价: 5
   计算执行计划代价: 5 
   执行计划枚举: 5
  1. 统计信息

    选择率:返回数据比例

    基数: 算子需要处理的行数

    收集方式:DDL指定;手动执行;动态采样

  2. 推导规则:假设列之间是独立的,列的值是均匀分布(不符合实际)

    Filter Selectivity

  3. 执行计划枚举

    贪心算法动态规划选出最优执行计划

结论:总体性能提升

3. 社区开源实践

  1. Apache Calcite概览

    统一的SQL查询引擎;RBO + CBO

  2. Calcite RBO

    HepPlanner: 优化规则(100+);基于经验,不保证最优;匹配规则

  3. Calcite CBO

    基于Volcano/Cascade框架;成本最优假设;等价计划集合(group);Top-down动态规划搜索;Memo

    VolcanoPlanner : group winner;剪枝(减少搜索空间)

4. 前沿趋势

引擎架构的进化:存储计算分离;一体化(HTPA,HASP,HTSAP)

Cloud:云原生(K8S)

湖仓一体:数据仓库 + 数据湖

DATA+AI:AI4BD(自配置,自诊断和自愈合,自优化);DB4AI(内嵌人工智能算法,内嵌机器学习框架)