2015-09-04 47 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