大数据基础班|青训营笔记

123 阅读2分钟

大数据与SQL

1.SQL的处理流程

A0963A66879A8EB86D6F79828EDAA2BC.jpg\

(1)Parser

●String-> AST ( abstract syntax tree )

V词法分析:拆分字符串,得到关键词、数值常量、字符串常量、运算符号等token

V语法分析:将token组成ASTnode,最终得到一个AST

●实现:递归下降(ClickHouse),Flex 和Bison (PostgreSQL),JavaCC (FIlink) ,Antlr (Presto, Spark)

(2)Analyzer和Logical Plan


●Analyzer

(检查并绑定Database, Table, Column等元信息

r SQL的合法性检查,比如min/max/avg的输入是数值

V AST -> Logical Plan

●Logical Plan

V逻辑地描述SQL对应的分步骤计算操作

r计算操作:算子( operator )

(3)查询优化


●SQL是一种声明式语言,用户只描述做什么,没有告诉数据库怎么做

目标:找到一个正确且执行代价最小的物理执行计划

●查询优化器是数据库的大脑,最复杂的模块,很多相关问题都是NP的

●-般SQL越复杂,Join的表越多,数据量越大,查询优化的意义就越大, 5219因为不同执行方式的性能差别可能有成百上千倍

2.查询优化器分类

(1)RBO

●主流RBO实现- -般都有几百条基于经验归纳得到的优化规则

●优点:实现简单,优化速度快

●缺点:不保证得到最优的执行计划
单表扫描:索引扫描(随机1/O) vs. 全表扫描(顺序I/O )

如果查询的数据分布非常不均衡,索引扫描可能不如全表扫描r Join 的实现: Hash Join vs. SortMerge Join

两表Hash Join :用小表构建哈希表如何识别小表 ?

多表Join:

哪种连接顺序是最优的?

是否要对每种组合都探索?

N个表连接,仅仅是left-deep tree就有差不多N!种连接顺序r e.g. N= 10->总共3, 628, 800个连接顺序

(2)CBO

●CBO 使用代价模型和统计信息估算执行计划的代价
●CBO 使用贪心或者动态规划算法寻找最优执行计划
●在大数据场景下CBO对查询性能非常重要
●主流RBO实现-般都有几百条基于经验归纳得到的优化规则. RBO实现简单,优化速度快
●RBO不保证得到最优的执行计划
●CBO使用代价模型和统计信息估算执行计划的代价
●CBO 使用贪心或者动态规划算法寻找最优执行计划
大数据场景下 CBO对查询性能非常重要