Sql由SQLContext处理,HQL由HiveContext处理。二者使用不同的parser进行解析。
Sql parser的实现在Spark SQL catalyst源码中,基于scala ddl paser的库文件实现了一套词法语法分析器。
HQL是SQL在Hive中的”方言”,它的解析借助开源语法分析器antrl实现。
在Hive源码中能看到一些.g后缀的文件,这些文件就是用于描述文法的,antrl将根据这些文件对输入进行词法语法分析生成抽象语法树(AST)。
无论Sql还是Hql,在经过解析后生成的AST都是相同的,后续的analyze,optimize和execute流程都是相同的。