专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

SparkSQL sql解析

1. 背景

搞了快两年OLAP平台的开发,其中sql的解析优化通过SparkSQL完成,这里简单介绍一下原理

2. Demo

假设你已经搭建了spark,hive环境,我们这边查询下hive表,代码如下:

93_1.png

这里主要做了三件事:

1、构建SparkSession

2、执行sql构建DataFrame

3、调用show方法触发action操作,展示结果,调用queryExecution.toString则可以打印各个阶段逻辑计划

3. 流程解析

这里我们主要研究上述Demo步骤2的流程,对SparkSQL有一定了解的同学肯定知道,一条sql进来,要经历五大解析阶段:

93_2.png

1、初步解析为Unresolved LogicalPlan

2、绑定schema信息解析为Analyzed LogicalPlan,规则见Analyzer类batches

3、结合RBO,CBO规则优化为Optimized LogicalPlan,规则见SparkOptimizer类defaultBatches

4、将Optimized LogicalPlan转化为物理计划Physical Plan,并选择可以执行的(目前选择第一个,未能实现真正意义上的CBO)

5、将可执行的Physical Plan转化为RDD[InternalRow],最终返回QueryExecution对象,并用这玩意结合schema信息构建DataFrame

上述各个LogicalPlan的构建的执行方法均在RuleExecutor的execute方法中,对于优化阶段Optimized LogicalPlan的构建,无非是遍历一个个优化规则调用apply方法,将树形结构的LogicalPlan作为参数传入,自底向上或者自顶向下遍历,case匹配进行转换,返回新的LogicalPlan,然后作为参数应用于下一个优化规则

93_3.png

4. 结语

有了上述知识,咱们如果要基于SparkSQL进行OLAP平台开发,继承BaseSessionStateBuilder类, 扩展解析、优化、物理三个部分的规则即可

文章永久链接:https://tech.souyunku.com/23583

未经允许不得转载:搜云库技术团队 » SparkSQL sql解析

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们