Presto-源码剖析


Parser

作用(翻译官):做语法、词法的解析,将Sql字符串转化为AST树
核心:SqlParser#invokeParser
其底层会调用AstBuilder做解析
AstBuilder:父类SqlBaseVisitor 定义了所有的Sql操作,AstBuilder重写了这些操作的实现
SqlBaseParser 针对所有操作都定义了对应的 StatementContext对象,如AddColumnContext等

AST是一颗树,节点是Node,每一个操作都是Node的子类,同时每个操作都有对应的实例。SqlQueryExecution
跟查询比较紧急的是Query类,其是Node的子类

对输入的表达式做解析

DescribeInputRewrite#visitDescribeInput

小结

parser 模块做的事情相对简单明了,就是将Sql语句转化为AST树
代码的话主要是调用底层Antlr4,由于这块设计是使用的访问者设计模式,因此代码跟踪起来可能不太容易

Analyzer

作用(校验):检查查询的目标资源是否存在以及是否有相对应的权限
同时会连接元数据库查询目标资源的元数据,此数据不仅用于做检查,还会用于后面的查询优化
核心:Analyzer#analyze
阶段:初始化SqlQueryExecution对象时(在此时同时会初始化每一个Task的调度)

分毕业生


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM