一、简介
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