大数据笔记|青训营笔记

78 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的的第1天。

本节课程主要分为 4 个方面:

1.大数据体系和 SQL2.常见的查询优化器;
3.查询优化器的社区开源实践;
4.SQL 相关的前沿趋势。

一.大数据体系和SQL

(1.)parser: 
      Strinf->AST
      词法分析:拆分字符串,得到关键字、数值常量、字符串常量、运算符号等 
      语法分析:将token组成ASTnode,最终得到一个AST 
(2.)SQL的处理流程: 
       Analyzer: 
       1. 检查绑定Database,Table,Column等元素 
       2.SQL的合法性,比如min/max的输入是否是数值 
       3.AST->logical Plan 
     Logical Plan: 
       1.逻辑地描述SQL对应的分布计算操作 
       2.计算操作:算子(operator) 
     Physical Plan: 
       1.Plan Fragment:执行计算子树 目标:最小化网络数据传输 利用上数据的物理分布(数据亲和性) 增加Shuffle算子 
       2.Executor: 单机并行:cache,pipeline,SIMD 多行并行:一个fragment对应多个实列 
       

SQL的一生

image.png

二.常见的查询优化器

 查询优化器的分类: 
     (1.)RBO(Pule-based Optimizer) 
     (2.)CBO(Cost-based Optimizer) 
 (一.)RBO(Pule-based Optimizer) 
 根据关系代数等价语义,重写查询 基于启发式规则 会访问表的信息元素(catalog),不会涉及具体的表数据(data) 
    Ⅰ.关系代数: 
         运算符:Select,Project,Join,Renman,Union 
         等价变换:结合律,交换律,传递性 
    Ⅱ.优化原则: 
         ■ Read data less and faster(I/O)
         ■ Transfer data less and faster(Network) 
         ■ Process data less and faster(CPU & Memory) 
    Ⅲ.列剪裁 Ⅳ.谓词下推 Ⅴ.传递闭包 Ⅵ.Runtime Filter 
    优点:实现简单,优化速度快 
    缺点:不保证得到最优的执行计算 
(二.)CBO(Cost-based Optimizer) 
        概念: 
          ○ 使用一个模型估算执行计划的代价,选择代价最小的执行计划 
          ○ 算子代价:CPU,内存,磁盘I/O,网络I/O等代价 
        (1.)统计信息: 
              原始表统计信息:
                ✓ 表或者分区级别:行数、行平均数、表在磁盘中占用了多少字节等 
                ✓ 列级别:min、max、num、nulls等 推导统计信息 
                ✓ 选择率(selectivity):对于某一个过滤条件,查询会从表中返回多大比列的数据 
                ✓ 基数(cardinality):在查询计划中常指算子需要处理的行数 
       (2.)统计信息的收集方式 
             1.)在DDL里指定需要收集的统计信息,数据库会在数据写入时收集或者更新统计信息 
             2.)手动执行explain analyze statement,触发数据库收集或者更新统计信息 
             3.)动态采样 
      (3.)统计信息推导规则 
             Filter Selectivity: 
                 AND条件:fs(a AND b)= fs(a)*fs(b) 
                 OR条件:fs(a OR b)=fs(a)+fs(b)-(fs(a)*fs(b)) 
          执行计划枚举: 
              1).单表扫描:索引扫描(随机I/O) vs 全表扫描(顺序I/O) 
                 如果查询的数据分布非常的不均衡,索引扫描可能不如全表扫描 
              2).Join的实现:Hash Join vs SoreMerge Jon 
                 Ⅰ.动态规划 Ⅱ.TPC-DS 

三.社区开源实践

   (1.)Apache Calcite:
         ● One size fits all:统一的SQL查询引擎 
         ● 模块化,插件化,稳定可靠 
         ● 支持异构数据模型 
         ● 内置RBO 和 CBO 
   (2.)Calcite RBO: 
         ◆ 优化规则 
         ◆ 内置100+优化规则 
         ◆ 四种匹配规则 
         ◆ 遍历所有的rule,知道没有rule可以被触发 
         ◆ 优化速度快,实现简单,但是不保证最优 
   (3.)Calcite CBO:
         ◇ VolcanoPlanner: 
              ◌ 基于Volcano/Cascade框架 
              ◌ 成本最优假设 
              ◌ Memo:存储候选执行计划 
                Group:等价计划集合 
                Top-down:动态规划搜索 
              ◌ 应用Rule搜索候选计划 
              ◌ Memo:本质:AND/OR graph 共享子树减少内存开销 
              ◌ Group winner:目前的最优计划 
              ◌ 剪枝(Branch-and-bound pruning):减少搜索空间 
              ◌ Top-down 遍历:选择winner构建最优执行计划 

四.前言趋势

 (1.)引擎构架的进化 
 (2.)云原生 
 (3.)湖仓一体 
 (4.)DATA+AI 
     ◎ AI4DB 自配置: 
         △ 智能调参(OtterTune,QTune) 
         △ 负载预测/调度 自诊断和自愈合:错误恢复和迁移 自优化 
         △ 统计信息估计(Learned cardinalities) 
         △ 代价估计 △ 学习型优化器(IBM DB2 LEO) 
         △ 缩影/视图推荐 
     ◎ DB4AI: 
          ▧ 内嵌人工智能算法(MLSQL,SQLFlow) 
          ▧ 内嵌机器学习框架(SparkML,Alink,dl-on-flink)\