48:Spark中的新解析引擎Catalyst源码Analyzer彻底详解
2016-08-07 18:40
288 查看
本期内容:
1. Analyzer的基本工作机制
2. Analyzer源码彻底详解
在sql语句的处理流程中,analyzer是在sqlparse的基础上,把unresolved logical plan生成logcal plan。
在构造方法中,除了catalog和functionRegistry,还有一个迭代次数,因为在分析时需要不断进行遍历。
通过迭代次数这个参数,我们可以定义一些策略,包括Once和FixedPoint,FixedPoint会根据参数控制迭代次数的上限。
batchs是整个analyzer的核心,里面会定义一系列的rules,这些rules会采取的特定的策略。通过这些规则,会把unresovled变成resovled。
在执行时,我们发现,各个规则之间是串行运行的,首先是对batchs进行循环,再对每个batch中rule进行处理。
标红的这句代码是整个过程的关键,是实际的执行过程,对调用各个Rule中的apply方法。
以一个具体的Rule来看的话,这里会使用到模式匹配,调用resolveOperators方法对plan中的内容进行解析。
resolveOperators会循环遍历各个节点,应用解析规则。
相比于SqlParser,analyzer整个流程更简洁一些,主要就是用rules,采用模式匹配进行处理,在这里还是想再感叹下Scala强大的语法能力。
1. Analyzer的基本工作机制
2. Analyzer源码彻底详解
在sql语句的处理流程中,analyzer是在sqlparse的基础上,把unresolved logical plan生成logcal plan。
Analyzer定义
在analyzer构造的时候,会传入catalog和functionRegistry,其中catelog用来存放用户指定的表名等信息,functionRegistry存放自定义函数,主要用来将未解析的属性和关系进行转换。在构造方法中,除了catalog和functionRegistry,还有一个迭代次数,因为在分析时需要不断进行遍历。
通过迭代次数这个参数,我们可以定义一些策略,包括Once和FixedPoint,FixedPoint会根据参数控制迭代次数的上限。
batchs是整个analyzer的核心,里面会定义一系列的rules,这些rules会采取的特定的策略。通过这些规则,会把unresovled变成resovled。
Analyzer指定
RuleExecutor中的execute是执行的入口。在执行时,我们发现,各个规则之间是串行运行的,首先是对batchs进行循环,再对每个batch中rule进行处理。
标红的这句代码是整个过程的关键,是实际的执行过程,对调用各个Rule中的apply方法。
以一个具体的Rule来看的话,这里会使用到模式匹配,调用resolveOperators方法对plan中的内容进行解析。
resolveOperators会循环遍历各个节点,应用解析规则。
相比于SqlParser,analyzer整个流程更简洁一些,主要就是用rules,采用模式匹配进行处理,在这里还是想再感叹下Scala强大的语法能力。
相关文章推荐
- 第48课:Spark中的新解析引擎Catalyst源码Analyzer彻底详解
- 50:Spark中的新解析引擎Catalyst源码Physical Plan彻底详解
- 第47课:spark中的新解析引擎catalyst源码sqlparser彻底详解
- 47:Spark中的新解析引擎Catalyst源码SqlParser彻底详解
- 第46课:Spark中的新解析引擎Catalyst源码初探 SQLContext、Catalog、SqlParser 、analyzer、optimizer、QueryExecution、RDD
- 第49课:Spark中的新解析引擎Catalyst源码Optimizer彻底详解.
- 51:Spark中的新解析引擎Catalyst源码SQL最终转化为RDD具体实现
- 第52课:spark的新解析引擎catalyst源码中的外部数据源、缓存及其他
- 第50课:spark的新解析引擎catalyst源代码physical plan彻底详解
- 第46课:Spark中的新解析引擎Catalyst源码初探
- 第51课: Spark中的新解析引擎Catalyst源码SQL最终转化为RDD具体实现
- 第51课:Spark中的新解析引擎Catalyst源码SQL最终转化为RDD具体实现
- 52:Spark中的新解析引擎Catalyst源码中的外部数据源、缓存及其它
- 46:Spark中的新解析引擎Catalyst源码初探
- 49:Spark中的新解析引擎Catalyst源码Optimizer彻底详解
- 45:神速理解Spark中的新解析引擎Catalyst
- Scala深入浅出进阶经典 第59讲:Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析
- 大数据Spark “蘑菇云”行动前传第4课:零基础彻底实战Scala控制结构及Spark源码解析
- 第一天:Java源码级实战速成(通过动手实战类、对象等,通过Spark和Hadoop案例代码和源码解析具体指知识的应用、深度详解匿名接口在Spark开发中的运用)
- Scala 深入浅出实战经典 第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析