本文的Presto是基于330版本
提交查询的步骤
presto的连接方式可以有两种,分别是CLI形式的和JDBC形式的,分别对应源码中的presto-cli模块和presto-jdbc模块,后续真正提交到presto coordinator对应到presto-client模块。本文以CLI来讲解Presto如何提交查询。
Presto客户端对查询语句的提交主要分为以下3个步骤:
- 从制定的文件、命令行参数或者Cli窗口中获取需要执行的Sql语句。
- 将得到的Sql语句组装成一个RESTful请求,发送给Coordinator,并处理返回的饿response。
- Cli会不停的循环分批读取查询结果并在屏幕进行动态显示,直到查询结果完全显示。
Cli方式
java -jar presto-cli-330-xxx-SNAPSHOT-executable.jar --server localhost:8080 --catalog hive --source dispatcher --client-tags adhoc --user dispatcher --client-request-timeout 60m --session implicit_conversion=true
之后就会进入Presto的客户端
时序图
大体的执行流程

源码分析
执行上面的可执行jar的main class实际上是io.prestosql.cli.Presto这个类,大体上的意思就通过airline解析命令行的参数,然后运行**console.run()**方法。
package io.prestosql.cli;
import static io.airlift.airline.SingleCommand.singleCommand;
public final class Presto
{
private Presto() {
}
public static void main(String[] args)
{
//根据传递的参数初始化一个Console对象,该对象中保存了启动Cli时传入的参数
Console console = singleCommand(Console.class).parse(args);
//如果启动的时候使用了--help或者--version则会显示帮助信息或者版本信息,然后直接退出
if (console.helpOption.showHelpIfRequested() ||
console.versionOption.showVersionIfRequested()) {
return;
}
//进入主程序,然后根据启动Cli传入的不同参数进行不同的处理
System.exit(console.run() ? 0 : 1);
}
}
进入Console类的run方法中,其中大体逻辑就是先分析Cli启动时有没指定了–execute或者–file参数,如果指定了就执行executeCommand方法,否则就执行runConsole方法,这两个方法最终都会进入Console类的process方法中
public boolean run()
{
//获取上面命令行中的所有参数,封装到ClientSession对象中
ClientSession session = clientOptions.toClientSession();
//判断有没--execute and --file 参数
boolean hasQuery = clientOptions.execute != null;
boolean isFromFile = !isNullOrEmpty(clientOptions.file);
//初始化日志
initializeLogging(clientOptions.logLevelsFile);
String query = clientOptions.execute;
if (hasQuery) {
query += ";";
}
if (isFromFile) {
//--execute and --file 两个参数不能同时出现
if (hasQuery) {
throw new RuntimeException("both --execute and --file specified");
}
try

本文详细介绍了基于Presto 330版本的查询提交步骤,包括通过CLI和JDBC的方式连接,重点解析了使用CLI提交查询的三个主要步骤:获取SQL、组装RESTful请求和显示查询结果。还深入源码分析了`Presto`类的执行逻辑,特别是`executeCommand`方法,展示了如何处理SQL语句并提交给Coordinator。整个过程涉及了客户端与Coordinator之间的交互,以及查询结果的处理和展示。
最低0.47元/天 解锁文章
1375

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



