2015-09-04 61 views
4

我正在對Hive運行查詢。相同的查詢應該與其他JDBC驅動程序,即其他關係數據庫一起工作。Statement.setMaxRows與Hive中的Statement.setFetchsize有什麼區別

我不能使用Statement.setFetchSize方法,因爲它在Hive JDBC 0.13.0中不受支持。

我試圖來解決這個周圍,因此,我來​​到了另一個類似的方法:Statement.setMaxRows

在哪些情況下我應該使用Statement.setMaxRows VS Statement.setFetchsize?

它可以交替使用它們嗎?

謝謝。

+0

您可以參考http:// stackoverflow。com/questions/1440543 /這是什麼是差異之間的設置語句獲取大小在jdbc或射擊一 –

+0

你確定「setFetchsize」不支持在Hive V0.13.0? ?那麼你爲什麼不使用V0.13.1驅動*(或0.14等)*來對付你的V0.13.0服務? –

+0

您可能還想知道http://stackoverflow.com/questions/32707682/jdbc-limit-vs-setmaxrowsresultset –

回答

6

不,你不能交替使用它們。他們做不同的事情。 setMaxRows =可以整體返回的行數。的setFetchSize =將在每個數據庫往返即

setFetchSize返回數爲JDBC驅動程序提供提示給 行數應該從數據庫時需要用於通過生成的ResultSet對象的更多的行 被擷取這個說法。

setMaxRows設置最大行數 的限制,此Statement對象生成的任何ResultSet對象可以包含 包含給定數字。

事實上,由於setFetchSize是一個提示,驅動程序可以自由地忽略它並做它認爲合適的事情。所以不要擔心Hive JDBC不支持這個。

注意,所有setMaxRows正在做的是

減少ResultSet對象的大小。它不會影響查詢的速度 。 setMaxRows不會更改實際的SQL - 使用 top/limit/rownum例如 - 所以它不會改變數據庫的工作。如果有更多的 結果返回,那麼 查詢將返回比您的限制更多的結果,然後截斷它們以適合您的ResultSet。

This answer做了解釋的setFetchSize如何是很重要的一個很好的工作:

到JVM中的性能和內存管理非常重要,因爲 它控制的網絡電話從JVM到數據庫中的數 以及相應的用於ResultSet處理的RAM數量。


順便說一句,可以的setFetchSize上java.sql.Statement中以及java.sql.ResultSet中進行設置。默認值由創建結果集的Statement對象設置。提取大小可能會隨時更改。 Hive JDBC擁有它自己的 HiveQueryResultSet with a setFetchSize method