presto java_Presto Jdbc
Presto Jdbc
標簽(空格分隔): Presto
一, 建立連接
傳統(tǒng)的JDBC方式類似,建立PrestoConnection”連接“,并且通過unwrap方法將connection轉(zhuǎn)換為PrestoConnection。實際上是賦值一些基本信息,并且建立新的OkHttpClient。
String url = "jdbc:presto://ip:port/hive/“; //默認連接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 中進入查看:
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()獲取當前任務(wù)狀態(tài),監(jiān)聽任務(wù)進度。
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é)果集大小默認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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 100999凑整到万位进一_四年级数学专
- 下一篇: react配合python_部署Reac