HQL的解析过程主要在Driver中的compile方法,这一些主要看这个方法中的代码。
1. compile中的主要内容
public int compile(String command, boolean resetTaskIds, boolean deferClose) {
..........
// 对sql语句进行处理(敏感信息、变量替换等)
String queryStr = command;
queryStr = HookUtils.redactLogString(conf, command); // 处理敏感信息(这里应该是可以自定义扩展的)
............
// Step1. 获取抽象语法树
ASTNode tree = ParseUtils.parse(command, ctx);
.............
// Step2. 进行语义分析
BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(queryState, tree);
sem.analyze(tree, ctx);
sem.validate();
// Step3. 生成执行计划
schema = getSchema(sem, conf);
plan = new QueryPlan(queryStr, sem, perfLogger.getStartTime(PerfLogger.DRIVER_RUN), queryId, queryState.getHiveOperation(), schema);
.............
return 0;
}
compile中主要有三大部分内容:

这篇博客详细解析了Hive如何将HQL语句进行编译,包括敏感信息处理、SQL解析生成抽象语法树、语义分析的步骤,以及语义分析器在不同SQL语句中的应用。通过分析Hive的Driver类和SemanticAnalyzer,阐述了从抽象语法树到执行计划的生成过程。
最低0.47元/天 解锁文章
310

被折叠的 条评论
为什么被折叠?



