首页 > 其他分享 >Presto-JDBC使用

Presto-JDBC使用

时间:2023-06-16 14:57:10浏览次数:36  
标签:JDBC statement presto Presto resultSet PrestoConnection 监听器 使用 new

一、简介

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

 

标签:JDBC,statement,presto,Presto,resultSet,PrestoConnection,监听器,使用,new
From: https://www.cnblogs.com/robots2/p/17485503.html

相关文章

  • [数据分析与可视化] Python绘制数据地图3-GeoPandas使用要点
    本文主要介绍GeoPandas的使用要点。GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型,并使用matplotlib进行绘图。GeoPandas官方仓库地址为:GeoPandas。GeoPandas的官方文档地址为:GeoPandas-doc。本文主要参考GeoPandasEx......
  • OCMock 的使用方法
    (一)置换方法(存根):告诉mock对象,当someMethod被调用,返回什么值调用方式:djalopy=[OCMockmockForClass[Carclass]];OCMStub([jalopygoFaster:[OCMArgany]units:@"kph"]).andReturn(@"75kph");使用场景:1.验证A方法时,A方法内部使用B方法的返回值但是B方法内部逻辑......
  • OpenIddict使用教程
    @@openiddictpassword模式流程 OpenIddict是一个ASP.NETCore身份验证库,可帮助您添加OpenIDConnect和OAuth2.0支持到ASP.NETCore应用程序中。下面是OpenIddict使用教程的步骤:安装OpenIddict,在项目中添加OpenIddict.Core和OpenIddict.EntityFrameworkCoreNuget包。......
  • 使用Postman的Get请求遇到:"type": "parsing_exception","reason": "Unknown
    错误如图原因postman自身的的bug问题。body里面写了json参数,结果postman将GET请求当成POST请求了。解决办法删掉json数据,或者重新建立一个连接。......
  • 隧道模式HTTP使用教程
    华科隧道HTTP格式为:服务器:端口账号密码隧道代理分钟2种模式:固定时间更改新IP(比如5分钟,10分钟,初次开通的时候可设定)请求一次更换一个新IP(可通过浏览器或者curl)1、使用浏览器1.1、使用浏览器切换IP(限制180次/小时,间隔>20秒)用浏览器访问 http://ip.hahado.cn/simple/switch-ip......
  • CHAT-GPT初使用
    拿chatgpt去试验了一下,一个挺小的需求,但是前后还是更改了三次,体验就是它可以不断改进之前实现的代码,但需要提需求的人比较清楚需求内的细节,差不多类似于,我有想法,它来实现,还是可以提高不少效率的。具体体验如下:我:请写一段C语言代码,将2M大小的文件填充0xff到30M,要求不能申请超过1K......
  • 服务器22端口没有对外开放,那使用ping命令还能通吗
       `ping`命令是基于ICMP协议的网络诊断工具,主要用于测试网络通信是否正常以及测量数据包往返时间等。它并不依赖于任何端口开放与否的情况,因此即使你的服务器的22端口没有对外开放,使用`ping`命令一样可以进行网络通信测试。当你使用`ping`命令测试某个服务器时,它会发......
  • Go语言之 go-redis 基本使用
    Go语言之go-redis基本使用Redis介绍Redis:https://redis.io/Redis中文网:https://www.redis.net.cn/REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统。Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持......
  • 云原生之使用Docker部署kkFileView在线文档管理平台
    (云原生之使用Docker部署kkFileView在线文档管理平台)一、kkFileView介绍1.kkFileView简介kkFileView是一个开源在线文档工具,使用springboot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3以及众多类文本如txt、html、xml、java、......
  • Vue el-date-picker 日期组件的使用,需要初始化时间,初始化时间时候,注意 日期月份 补0
    Vueel-date-picker日期组件的使用需要初始化时间,初始化时间时候,注意日期月份补0https://www.cnblogs.com/zhoushuang0426/p/10606863.html一:显示年月<el-date-pickerv-model="selectMonth"type="month"placeholder="选择月"@change="jobSearch"va......