zoukankan      html  css  js  c++  java
  • Catalyst揭秘 Day4 analyzer解析

    Catalyst揭秘 Day4

    analyzer解析

    今天继续解析catalyst,主要讲一下analyzer,在sql语句的处理流程中,analyzer是在sqlparse的基础上,把unresolved logical plan生成logcal plan。

    Analyzer定义

    在analyzer构造的时候,会传入catalog和functionRegistry,其中catelog用来存放用户指定的表名等信息,functionRegistry存放自定义函数,主要用来将未解析的属性和关系进行转换。

    Snip20160723_147

    在构造方法中,除了catalog和functionRegistry,还有一个迭代次数,因为在分析时需要不断进行遍历。
    Snip20160723_148

    通过迭代次数这个参数,我们可以定义一些策略,包括Once和FixedPoint,FixedPoint会根据参数控制迭代次数的上限。

    Snip20160723_149

    batchs是整个analyzer的核心,里面会定义一系列的rules,这些rules会采取的特定的策略。通过这些规则,会把unresovled变成resovled。
    Snip20160723_150

    Analyzer指定

    RuleExecutor中的execute是执行的入口。
    在执行时,我们发现,各个规则之间是串行运行的,首先是对batchs进行循环,再对每个batch中rule进行处理。

    Snip20160723_151

    标红的这句代码是整个过程的关键,是实际的执行过程,对调用各个Rule中的apply方法。
    以一个具体的Rule来看的话,这里会使用到模式匹配,调用resolveOperators方法对plan中的内容进行解析。

    Snip20160723_155

    resolveOperators会循环遍历各个节点,应用解析规则。
    Snip20160723_158

    相比于SqlParser,analyzer整个流程更简洁一些,主要就是用rules,采用模式匹配进行处理,在这里还是想再感叹下Scala强大的语法能力。

    欲知后事如何,且听下回分解!

    DT大数据每天晚上20:00YY频道现场授课频道68917580

  • 相关阅读:
    C# 小算法1
    函数 y=x^x的分析
    随机数
    对拍
    Cube Stack
    Permutation
    一笔画问题
    康托展开&&康托逆展开
    待完成
    小错误 17/8/10
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5699412.html
Copyright © 2011-2022 走看看