presto(九)——restful api之execute

1、看状态

@Path("/v1/execute")
public class ExecuteResource
{
    private final HttpServerInfo serverInfo;
    private final HttpClient httpClient;
    private final JsonCodec<QueryResults> queryResultsCodec;

2、看执行方法

ExecuteResource.java(@Path("/v1/execute"))

 @POST
    @Produces(MediaType.APPLICATION_JSON)
    public Response createQuery(String query, @Context HttpServletRequest servletRequest)
    {
        assertRequest(!isNullOrEmpty(query), "SQL query is empty");

        ClientSession clientSession = createClientSessionForRequest(servletRequest, serverUri(), new Duration(2, MINUTES));
        StatementClient client = new StatementClient(httpClient, queryResultsCodec, clientSession, query);

        List<Column> columns = getColumns(client);
        Iterator<List<Object>> iterator = flatten(new ResultsPageIterator(client));
        SimpleQueryResults results = new SimpleQueryResults(columns, iterator);

        return Response.ok(results, MediaType.APPLICATION_JSON_TYPE).build();
    }
    

有没有发现跟上一节的很相似:

QueryResource.java(@Path("/v1/query"))

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public Response createQuery(
            String statement,
            @Context HttpServletRequest servletRequest,
            @Context UriInfo uriInfo)
    {
        assertRequest(!isNullOrEmpty(statement), "SQL statement is empty");

        Session session = createSessionForRequest(servletRequest, transactionManager, accessControl, sessionPropertyManager, queryIdGenerator.createNextQueryId());

        QueryInfo queryInfo = queryManager.createQuery(session, statement);
        URI pagesUri = uriBuilderFrom(uriInfo.getRequestUri()).appendPath(queryInfo.getQueryId().toString()).build();
        return Response.created(pagesUri).entity(queryInfo).build();
    }

我们先看看返回值:
QueryResource返回的是uri+queryInfo (链接地址+查询信息)
ExecuteResource返回的是results (结果)

其实还有一个类:

@Path("/v1/statement")
public class StatementResource

同样也有createQuery方法:

@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, transactionManager, accessControl, sessionPropertyManager, queryIdGenerator.createNextQueryId());

        ExchangeClient exchangeClient = exchangeClientSupplier.get(deltaMemoryInBytes -> { });
        Query query = new Query(session, statement, queryManager, exchangeClient);
        queries.put(query.getQueryId(), query);

        return getQueryResults(query, Optional.empty(), uriInfo, new Duration(1, MILLISECONDS));
    }

3、三个不同的类相同方法对比

Execute Resource

The execute resource is what the client sends queries to. It is
available at the path ``/v1/execute``, and accepts a query as a POST
and returns JSON.

Query Resource

The query resource takes a SQL query. It is available at the path
``/v1/query`` and accepts several HTTP methods.

Statement Resource

This is the standard resource used by the client to execute a
statement. When executing a statement, the Presto client will
call this resource repeatedly to get the status of an ongoing
statement execution as well as the results of a completed
statement.

可以看出来Statement Resource这种是标准的用于client查询用的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,694评论 0 4
  • =========================================================...
    lavor阅读 3,508评论 0 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • “给神说一声,如果你要拿走我的生命就拿走吧,然后重重倒下(完全不控制),然后躺在床上一动不动就当自己死掉,这时无论...
    竺子阅读 371评论 0 2