Presto-[17]-Console提交查询过程

Console提交查询过程
Console::executeCommand()直接提交sql
Console::process(),包装Query,启动查询
QueryRunner::startQuery,启动查询

构造Query
Query query = queryRunner.startQuery(finalSql),来构建StatementClient  

StatementClient负责构造查询和获取结果与coordinator通信

构造请求
Request request = buildQueryRequest(session, query);
执行restful(/v1/statement)
JsonResponse<QueryResults> response = JsonResponse.execute(QUERY_RESULTS_CODEC, httpClient, request);
处理结果
processResponse(response.getHeaders(), response.getValue());

Query::分批拉数据
query.renderOutput(System.out, outputFormat, interactive)

第一种方式,动态刷屏分批拉数据
statusPrinter.printInitialStatusUpdates();
第二种方式,非动态拉取最终结果
waitForData();

共同点:
都是调获取结果,前面说了StatementClient负责构造查询和获取结果与coordinator通信
(/v1/statement/{queryId}/{token})
StatementClient::advance()
主要先获取分批nextUri,构造查询

猜你喜欢

转载自blog.csdn.net/hjw199089/article/details/81210075