这是我参与「第四届青训营 」笔记创作活动的第1天
- 大数据体系和SQL
1.1 大数据体系中的SQL
大数据体系中的SQL可以总结为一句话:One SQL rules big data all. 即用SQL处理所有的大数据。大数据体系中,SQL的应用主要体现在分析引擎中。如,批示处理中的Spark、Hive、MR;实时分析的Flink;交互分析的Presto、Clickhouse、Doris等。
1.2 SQL的处理流程
- 1.Parser:用词法分析和语法分析将SQL语句解析为抽象语法树。
- 2.Analyzer:检查语法、绑定Database等元信息并输出逻辑计划,逻辑地描述SQL对应的分步骤计算操作。
- 3.Optimizer:由于SQl的具体操作没有被指定,有很大的自由度,所以一个好的执行计划至关重要。而SQL越复杂,join的表越多,数据量越大,查询优化的意义就越大,因为不同执行方式的性能差别可能有成百上千倍。
- 4.Executor:按照最小网络数据传输的目标把逻辑计划拆分为多个物理计划片段。
- 常见的查询优化器
2.1 查询优化器分类
- Top-down Optimizer:从目标输出开始,由上往下遍历计划树,找到最优的执行计划。如SQLServer
- Bottom-up Optimizer:从零开始,由下往上遍历计划树,找到完整的执行计划。如,PostgreSQL
- Rule-based Optimizer:基于启发式规则,根据关系代数等价语义,重写查询。
- Cost-based Optimizer:使用一个模型估算执行计划的代价,选择代价最小的执行计划。 几种查询优化器中最常用的就是RBO(Rule-based Optimizer)和CBO(Cost-based Optimizer),因此只展开介绍上述两种查询优化器。
2.2 RBO
- RBO的实现一般都有几百条基于经验归纳得到的优化规则
- 优点:实现简单,优化速度快
- 缺点:不保证得到最优的执行计划
2.3 CBO
- CBO使用代价模型和统计信息估算执行计划的代价
- CBO使用贪心或动态规划算法寻找最优执行计划