一、简介

PrestoConnection并不能提供一个持久的Socket连接,而是创建一个OkHttpClient与Presto按照HTTP1.1协议进行通信,并且PrestoConnection仅保存一些基本信息(catalog、schema等)

二、使用方式

1、建立连接

和传统的JDBC方式类似,建立PrestoConnection”连接“,并且通过unwrap方法将connection转换为PrestoConnection。实际上是赋值一些基本信息,并且建立新的OkHttpClient。

String url = "jdbc:presto://ip:port/hive/“;    //默认连接hive
String user = "root";
Properties properties = new Properties();
properties.setProperty("user", user);
PrestoConnection conn = DriverManager.getConnection(prestoUrl, properties).unwrap(PrestoConnection.class);
conn.setClientInfo("ApplicationName", "group_1");
 //指定资源组
conn.setSessionProperty("query_max_total_memory", "1GB"); //指定此次操作可使用的presto最大内存大小

2、Step2 建立Statement执行语句

指定SQL执行的相关属性。在设置监听器的时候需要注意!presto的任务监听器会阻塞presto任务的执行,所以不建议在监听器中做任何耗时的操作。如果需要使用监听器记录presto任务的状态,可自己启动一个线程使用prestoResultSet.getStats()获取当前任务状态,监听任务进度。

PrestoStatement statement = conn.createStatement().unwrap(PrestoStatement.class);
statement.setQueryTimeout(10); 
//设置SQL语句可执行的时长(秒)
statement.setLargeMaxRows(1000);
 //设置可获取结果集的大小(分批获取,直到超过此值后结束)
AtomicReference<String> queryId = new AtomicReference<>();
statement.setProgressMonitor(queryStats -> { //设置监听器(可选),可监听presto任务执行状况
queryId.set(queryStats.getQueryId()); //获取presto任务ID(可用该ID终止任务)
});
PrestoResultSet resultSet = statement.executeQuery("select * from table").unwrap(PrestoResultSet.class);

3、Step3 获取结果集

将结果集转换为json列表。这里需要注意的是resultSet.next()方法,Presto服务端并不会一次全部把结果返回给客户端,而是不断的通过next()方法调用HTTP接口获取(每次获取结果集大小默认1mb),直到PrestoClient状态不为Running时结束。

List<JSONObject> results = new ArrayList<>();
int count = resultSet.getMetaData().getColumnCount();
String[] columns = new String[count];
for (int i = 0; i < count; i++) {
columns[i] = resultSet.getMetaData().getColumnName(i + 1);
}
while (resultSet.next()) {
JSONObject jsonObject = new JSONObject();
for (int j = 0; j < count; j++) {
jsonObject.put(columns[j], resultSet.getString(j + 1));
}
results.add(jsonObject);
}

参考文章:https://zhuanlan.zhihu.com/p/72488989

Presto-JDBC使用的更多相关文章

  1. Cassadra & presto 集群部署

    四台服务器部署cassandra集群 和 presto搜索引擎 及代码演示: 还有很多细节没有补充,有问题和疑问的地方 咋们一起探讨哇!1.创建用户    使用root用户登录应用服务器,执行以下操作 ...

  2. 【原创】大叔问题定位分享(33)beeline连接presto报错

    hive2.3.4 presto0.215 使用hive2.3.4的beeline连接presto报错 $ beeline -d com.facebook.presto.jdbc.PrestoDriv ...

  3. 【原创】大数据基础之Presto(1)简介、安装、使用

    presto 0.217 官方:http://prestodb.github.io/ 一 简介 Presto is an open source distributed SQL query engin ...

  4. presto——java.sql.SQLException: Error executing query与javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?异常问题

    使用presto的时候以mysql为presto的数据源 安装的presto是0.95版本:使用的presto-jdbc是0.202的,这里使用jdbc去访问时候,connection可以链接成功,但 ...

  5. Presto Event Listener开发

    简介 同Hive Hook一样,Presto也支持自定义实现Event Listener,用于侦听Presto引擎执行查询时发生的事件,并作出相应的处理.我们可以利用该功能实现诸如自定义日志记录.调试 ...

  6. 【原创】大数据基础之Benchmark(2)TPC-DS

    tpc 官方:http://www.tpc.org/ 一 简介 The TPC is a non-profit corporation founded to define transaction pr ...

  7. presto 配置mysql.properties异常Database (catalog) must not be specified in JDBC URL for MySQL connector

    在presto 0.210 以后配置mysql.properties的时候,对于jdbc-url属性配置后面要加上对应要链接的database connection-url=jdbc:mysql:// ...

  8. #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

    郑昀 创建于2014/10/30 最后更新于2014/10/31   一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...

  9. presto的动态化应用(一):presto节点的横向扩展与伸缩

    一.presto动态化概述 近年来,基于hadoop的sql框架层出不穷,presto也是其中的一员.从2012年发展至今,依然保持年轻的活力(版本迭代依然很快),presto的相关介绍,我们就不赘述 ...

  10. 环境搭建 Hadoop+Hive(orcfile格式)+Presto实现大数据存储查询一

    一.前言 Hadoop简介 Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关 ...

随机推荐

  1. 李世铭SFE|销售的四种境界-与之匹配的CRM功能

    销售有四种境界,与之匹配的也应有四种不同的CRM系统的功能. 1.服务型销售 这类销售代表人数最为众多,超过半数的销售代表皆属于服务型.他们主要基于客户的需求,来提供相应的解决方案,或者公司所规定的某 ...

  2. Business Object 开发

    一  什么是BO BO(Business Object),封装在数据库之上,用于直接操作数据(增.删.改.查) 针对不同的BO,在安装目录下有对应的DLL文件,其中封装了BO各式针对具体的业务的方法, ...

  3. 一个.NET开源、免费、功能强大的 PDF 处理工具

    前言 在日常工作中PDF文档的处理往往受限于其固有的格式,使得用户在编辑.合并.剪裁等方面面临诸多不便.今天大姚给大家分享一个.NET开源.免费.功能强大的 PDF 处理工具:PDF 补丁丁(PDFP ...

  4. 切换Docker本地目录

    背景: df -h,发现docker默认的路径在/var/lib下,而且容量即将满掉. 对于欧拉系统来说,目录在/home,需要把docker目前的目录切换到/home下. 解决方法: 1. Dock ...

  5. 【Amadeus原创】IPAD忘记密码重置恢复出厂设置

    打开iTunes,确保您的 iPad 没有连接到电脑. 按住顶部按钮,直到出现关机滑块.拖移这个滑块以将 iPad 关机. 在按住主屏幕按钮的同时,将 iPad 连接到电脑.继续按住主屏幕按钮,直到看 ...

  6. maven打包时跳过TEST的方式汇总

    使用maven打包时如何跳过test,有以下几种方式 针对spring项目 <plugin> <groupId>org.apache.maven.plugins</gro ...

  7. springboot 多数据源(aop方式)

    一.实现思路 在yml中定义多个数据源的配置,然后创建一个类DynamicDataSource去继承AbstractRoutingDataSource类 AbstractRoutingDataSour ...

  8. nginx如何配置代理转发

    Nginx是个厉害的服务器,可以配置多个服务器,一个server就是一个服务器server {      listen       80;      server_name  *.yourdomain ...

  9. manim边学边做--同伦变换

    在Manim中,移动一个元素除了之前介绍的方法之外,还可以通过同伦运算来移动一个元素. 与普通的移动元素方式相比,使用同伦运算移动一个元素时,实际上是在考虑整个空间的连续变形过程中元素的相应变化. 这 ...

  10. Qt/C++控件设计器/属性栏/组态/可导入导出/中文属性/串口网络/拖曳开发

    一.功能特点 自动加载插件文件中的所有控件生成列表,默认自带的控件超过120个. 拖曳到画布自动生成对应的控件,所见即所得. 右侧中文属性栏,改变对应的属性立即应用到对应选中控件,直观简洁,非常适合小 ...