日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

presto java_Presto Jdbc

發(fā)布時間:2024/8/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 presto java_Presto Jdbc 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Presto Jdbc

標(biāo)簽(空格分隔): Presto

一, 建立連接

傳統(tǒng)的JDBC方式類似,建立PrestoConnection”連接“,并且通過unwrap方法將connection轉(zhuǎn)換為PrestoConnection。實際上是賦值一些基本信息,并且建立新的OkHttpClient。

String url = "jdbc:presto://ip:port/hive/“; //默認(rèn)連接hive

String user = "PRESTO";

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最大內(nèi)存大小

conn.setSessionProperty("","");類似的屬性可以在 presto Client 中進(jìn)入查看:

SET SESSION;

即可顯示 可以在SESSION 級別修改的 屬性。

二,建立Statement執(zhí)行語句

指定SQL執(zhí)行的相關(guān)屬性。在設(shè)置監(jiān)聽器的時候需要注意!presto的任務(wù)監(jiān)聽器會阻塞presto任務(wù)的執(zhí)行,所以不建議在監(jiān)聽器中做任何耗時的操作。如果需要使用監(jiān)聽器記錄presto任務(wù)的狀態(tài),可自己啟動一個線程使用prestoResultSet.getStats()獲取當(dāng)前任務(wù)狀態(tài),監(jiān)聽任務(wù)進(jìn)度。

PrestoStatement statement = conn.createStatement().unwrap(PrestoStatement.class);

statement.setQueryTimeout(10); ?//設(shè)置SQL語句可執(zhí)行的時長(秒)

statement.setLargeMaxRows(1000);? //設(shè)置可獲取結(jié)果集的大小(分批獲取,直到超過此值后結(jié)束)

AtomicReference queryId = new AtomicReference<>();

statement.setProgressMonitor(queryStats -> { //設(shè)置監(jiān)聽器(可選),可監(jiān)聽presto任務(wù)執(zhí)行狀況

queryId.set(queryStats.getQueryId()); //獲取presto任務(wù)ID(可用該ID終止任務(wù))

});

PrestoResultSet resultSet = statement.executeQuery("select * from table").unwrap(PrestoResultSet.class);

三,獲取結(jié)果集

將結(jié)果集轉(zhuǎn)換為json列表。這里需要注意的是resultSet.next()方法,Presto服務(wù)端并不會一次全部把結(jié)果返回給客戶端,而是不斷的通過next()方法調(diào)用HTTP接口獲取(每次獲取結(jié)果集大小默認(rèn)1mb),直到PrestoClient狀態(tài)不為Running時結(jié)束。

List 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);

}

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的presto java_Presto Jdbc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。