前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SparkSql LogicalPlan的resolved变量

SparkSql LogicalPlan的resolved变量

作者头像
数据仓库践行者
发布2021-02-02 09:35:50
5830
发布2021-02-02 09:35:50
举报

在阅读SparkSql源码过程中,可能会遇到的小迷惑

resolved主要用来标记当前 LogicalPlan 是否为经过了解析。

代码语言:javascript
复制
//当前logicalplan中的所有的expressions都被解析了,并且该logicalplan的子节点也被解析,刚当前的logicalplan的resolved会返回true
lazy val resolved: Boolean = expressions.forall(_.resolved) && childrenResolved

logicalplan分unresolved logical plan和resolved logical plan,resolved可以被子类重写。

看两个案例
UnresolvedRelation

UnresolvedRelation 是由ASTTree直接生成的unresolved logical plan的节点,还未被解析,所以resolved被赋值为false

Aggregate

Aggregate 有"两重身份",不像 UnresolvedRelation 一定是未解析的。Aggregate即可以unresolved也可resolved。

具体它有没有被解析,主要依靠重写的resolved变量来决定:

1、确认所有expressions都被解析

2、确认当前节点的所有子节点都被解析

3、不能含有window函数。为什么不能含有window函数呢?把sparksql整体的代码看一遍后,就很清楚啦,在生成resolved logical plan阶段,有一个ExtractWindowExpressions的规则,这个规则专门负责把window函数抽取为window节点。

ExtractWindowExpressions的apply方法如下:

看具体的执行计划也很清晰

Sql:

代码语言:javascript
复制
SELECT A,B, COUNT(1) AS CNT,row_number() over(partition by A order by B desc) as rn FROM TESTDATA2 WHERE A>2 GROUP BY A,B

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据仓库践行者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 看两个案例
    • UnresolvedRelation
      • Aggregate
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档