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