查询总流程图:
1. Query创建
statementResource在接收到查询请求后,会通过调用createQuery方法来响应,每调用一次该方法,构造一个driver,如果有多个stage,会发送多次http请求,进行driver创建。其中一个driver使用若干个operator处理一个split:
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response createQuery(
String statement,
@Context HttpServletRequest servletRequest,
@Context UriInfo uriInfo)
throws InterruptedException
{
assertRequest(!isNullOrEmpty(statement), "SQL statement is empty");
Session session = createSessionForRequest(servletRequest, accessControl, sessionPropertyManager, queryIdGenerator.createNextQueryId());
ExchangeClient exchangeClient = exchangeClientSupplier.get(deltaMemoryInBytes -> { });
Query query = new Query(session, statement, queryManager, exchangeClient);//主要是调用sqlQueryManager的createQuery方法
queries.put(query.getQueryId(), query);
return getQueryResults(query, Optional.empty(), uriInfo, new Duration(1, MILLISECONDS));//获取查询结果
}