SparkSQL——AnalyzedLogicalPlan生成

news2024/11/25 10:12:09

Rule和RuleExecutor

SparkSQL中对LogicalPlan的解析、优化、还有物理执行计划生成都是分成一个个Rule进行的。
RuleExecutor是一个规则引擎,它收集Rule,并对plan按照rule进行执行。

每一个Rule的实现类都要实现apply方法,具体逻辑都放在这个方法中。

RuleExecutor核心是batches存放要执行的rule、execute执行batches的rule。
batches中有很多Batch对象。相同执行策略、相似功能的rule会生成一个Batch对象。


execute方法中按照batch和batch中的rule遍历执行。

Analyzed LogicalPlan

SQL示例:SELECT name FROM student WHERE age>18
在sql那里生成的plan是unresolved plan。调用Dataset的ofRows方法将plan传入。

在ofRows方法中,创建了QueryExecution对象。

QueryExecution对象中logical是unresolved plan,analyzed是analyzed plan,optimizedPlan是optimized plan,sparkPlan是物理算子树、executedPlan是执行算子树、toRdd是转换后的RDD。除了logical是传入的变量,其余都是lazy懒加载,只有使用的时候才会赋值。

在ofRows方法中紧接着调用了assertAnalyzed方法,这里触发了analyzed的计算赋值。
核心方法是analyzer.executeAndCheck(logical, tracker)

Analyzer
Analyzer类提供逻辑查询计划分析,使用[[SessionCatalog]]中的信息将[[UnresolvedAttribute]]s和[[UnsolvedRelations]]转换为全类型对象。
executeAndCheck是plan analysis正式开始的地方。

executeAndTrack是调用的execute

execute方法就是RuleExecutor中的方法。重点是Analyzer的batches变量中的rule。
可以看到batches中有很多rule.

ResolveRelations示例

unresolved plan如下,ResolveRelations规则会执行处理unresolvedRelation。

apply方法中是ResolveTempViews是用来处理视图的

resolveOperatorsUp
这个是后序自下而上进行遍历。调用rule的apply方法。

ResolveTempViews的apply方法,本例中没有视图,所以lookupTempView返回空,最后还是返回LogicalPlan(目前没变化)

因为还是UnresolvedRelation,所以执行lookupRelation方法后再执行resolveViews方法。

lookupRelation
CatalogV2Util.loadTable是来获取表信息。从catalog中获取表,优先获取v1 table,否则取v2 table。
最后生成了SubqueryAlias里面包含DataSourceV2Relation.


处理完如下图:

这里只是使用ResolveRelations处理了UnresolvedRelation.还有别的规则需要用来处理UnresolvedAttribute、常量等。处理方式跟ResolveRelations规则类似。

最后经过一系列规则后生成analyzed plan



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql中的时间相关函数

MySQL服务器中有3种时区设置: 系统时区(保存在system_time_zone系统变量中)服务器时区(保存在全局系统变量time_zone中)每个客户端连接的时区(保存在会话变量time_zone中) 其中,客…

极米RS10Plus性价比高吗?7款4-6K价位投影仪测评哪款最好

通常家庭想买个投影仪都会选择4-6K这个价位段的投影仪,3K以下的投影配置太低,6K以上的价格略高,4-6K价位段的中高端投影仪正好满足大部分家庭的使用需求。正好极米投影在8月份上新了一款Plus版本的长焦投影:极米RS10Plus&#xff…

剪切走的照片找回:数据恢复实战指南

一、引言:当珍贵瞬间遭遇剪切失误 在数字化时代,照片不仅是记忆的载体,更是情感与故事的传承。然而,一次不经意的剪切操作失误,却可能让这些珍贵的瞬间面临丢失的风险。面对剪切走的照片,许多用户会感到无…

AI看奥运 | 从巴黎奥运会看人工智能的应用和发展

2024巴黎奥运会火热空前,从开幕式到金牌争夺战,本届奥运会的关注热度持续攀升。与往届不同的是,本届奥运会不仅是首次在体育场馆外举办的户外开幕式的奥运会,同时也是在转播技术上首次广泛应用AI技术的奥运会,包括“时…

C++ 新特性 | C++20 常用新特性介绍

目录 1、模块(Modules) 2、协程(Coroutines) 3、概念(Concepts) 4、范围(Ranges) 5、三向比较符(three-way comparison) C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https…

哈尔滨等保测评——为工业网络安全保驾护航新航标

哈尔滨,这个以冰雪和美丽闻名世界的城市,现在又树立了一个全新的行业标准,那就是“等保”,正在掀起一场新的安全革命,保卫着这个智能时代! ❄️【哈尔滨新视野】❄️ 哈尔滨是一块充满创新活力的土地&…

数据结构之Map和Set(下)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 上一篇文章,我们学习了:二叉搜索树、Map和Set的介绍以及常见方法的基本使用…

充电宝啥牌子质量好性价比高?探寻性价比高充电宝!

这个移动设备无处不在的时代,充电宝已经成为我们生活中不可或缺的配件。然而,面对市场上琳琅满目的充电宝品牌和型号,许多人在选择时往往感到困惑。如何找到一款质量好、性价比高的充电宝,成为了众多消费者关注的焦点。本文将带您…

SpringMVC (发送请求——>参数传递—— >响应数据)

设置请求访问路径 RequestMapper:将请求访问路径和我们业务层的方法联系起来 ResponseBody:将我们业务层方法的返回值转化为json,xml或其他格式的数据返回给页面 两种请求 get请求 post请求 测试案例 RequestMapping("/getNameAndAge&…

Linux逻辑卷管理LVM

系列文章目录 提示:仅用于个人学习,进行查漏补缺使用。 1.Linux介绍、目录结构、文件基本属性、Shell 2.Linux常用命令 3.Linux文件管理 4.Linux 命令安装(rpm、install) 5.Linux账号管理 6.Linux文件/目录权限管理 7.Linux磁盘管理/文件系统 提示&a…

应急响应:Windows 入侵排查思路.

什么是应急响应. 一个组织为了 应对 各种网络安全意外事件的发生 所做的准备 以及在 事件发生后 所采取的措施 。说白了就是别人攻击你了,你怎么把这个攻击还原,看看别人是怎么攻击的,然后你如何去处理,这就是应急响应。 目录&am…

数字货币市场历史数据获取API(含源代码)

加密数字货币市场历史数据获取API(含源代码) 数字货币市场历史数据获取API(含源代码)1. Binance API运行结果BTCUSDT.csv 文件截图 2. CoinGecko API3. CryptoCompare API总结 数字货币市场历史数据获取API(含源代码&a…

【机器学习算法基础】(基础机器学习课程)-11-k-means-笔记

示例案例 为了更好地理解 K-Means 算法,下面通过一个简单的案例进行说明。 假设我们有以下 10 个二维数据点,表示不同商店的销售额(单位:千元)和顾客数(单位:人): [(1…

zabbix的自动发现和注册、proxy代理和SNMP监控

一、zabbix自动发现和注册 1.概念 zabbix客户端主动的和服务端联系,将自己的地址和端口发送给服务端,实现自动添加监控主机。 客户端是主动的一方 缺点:自定义网段中主机数量太多,登记耗时会很久,而且这个自动发现…

多参数MRI靶向活检与系统性活检在筛查筛状和导管内癌前列腺癌中的比较| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Comparison of Multiparametric MRI–targeted and Systematic Biopsies for Detection of Cribriform and Intraductal Carcinoma Prostate Cancer 多参数MRI靶向活检与系统性活检在筛查筛状和导管内癌前列腺癌中的比较 Background 背景 Intraductal carcin…

婴儿浴缸及沐浴辅助用品 亚马逊澳大利亚站认证

本政策涵盖的婴儿浴缸及沐浴辅助用品 婴儿沐浴辅助用品用于为婴儿提供支撑,以便成人可以腾出手来为婴儿沐浴。商品设计多种多样,可能随婴儿浴缸一起提供,也可能塑造成婴儿浴缸的形状,也可能设计为淋浴时使用的椅子。婴儿沐浴辅助…

制造知识普及(十)-- 常见的工业软件介绍

「 1. ERP」 企业资源计划(enterprise resource planning,ERP)是制造企业的核心管理软件。ERP系统的基本思想是以销定产,协同管控企业的产、供、销、人、财、物等资源,帮助企业按照销售订单,基于产品的制造…

十一、vector 类

Ⅰ . vector 的介绍和使用 01 vector 的介绍 vector 的文档介绍:vector ① vector 是表示可变大小数组的序列容器,既像数组,又不像数组 像体现在:同样采用连续存储空间存储元素,可以使用下标访问元素 不像体现在&…

ffmpeg -- 常用口令

文章目录 1.视频格式转换2.设置比特率3.设置帧率4.强制让输入视频帧率为1,输出视频帧率为245.长视频截短6.自动分割视频的bash脚本7.每一帧都保存成图片 1.视频格式转换 ffmpeg -i input.avi output.mp42.设置比特率 ffmpeg -i input.avi -b:v 64k -bufsize 64k o…

Kuboard v3安装手册

1、Kuboard v3安装 docker pull swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3 #启动kuboard容器 docker run -d \ --restartunless-stopped \ --namekuboard \ -p 8003:80/tcp \ -p 30081:10081/tcp \ -e KUBOARD_ENDPOINT"http://10.111.13.2:8003&q…