gpt4 book ai didi

java - Hive 中的 Statement.setMaxRows 与 Statement.setFetchsize 之间有什么区别

转载 作者:可可西里 更新时间:2023-11-01 07:20:02 27 4
gpt4 key购买 nike

我正在对 Hive 运行查询。相同的查询应该适用于其他 JDBC 驱动程序,即其他关系数据库。

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

我正在尝试解决这个问题,因此,我想到了另一个类似的方法:Statement.setMaxRows

在什么情况下我应该使用 Statement.setMaxRows 还是 Statement.setFetchsize?

是否可以互换使用它们?

谢谢。

最佳答案

不,您不能互换使用它们。他们做不同的事情。 setMaxRows = 可以整体返回的行数。 setFetchSize = 将在每个数据库往返中返回的数字,即

setFetchSize Gives the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed for ResultSet objects genrated by this Statement.

setMaxRows Sets the limit for the maximum number of rows that any ResultSet object generated by this Statement object can contain to the given number.

事实上,由于 setFetchSize 是一个提示,因此驱动程序可以自由地忽略它并执行它认为合适的操作。所以不用担心 Hive JDBC 不支持这个。

请注意,setMaxRows 所做的只是

reducing the size of the ResultSet object. It won't affect the speed of the query. setMaxRows doesn't change the actual SQL - using top/limit/rownum e.g. - so it doesn't change the work the DB does. The query will return more results than your limit if there are more results to return, then truncate them to fit your ResultSet.

This answer很好地解释了 setFetchSize 的重要性:

very important to performance and memory-management within the JVM as it controls the number of network calls from the JVM to the database and correspondingly the amount of RAM used for ResultSet processing.


顺便说一句,可以在 java.sql.Statement 和 java.sql.ResultSet 上设置 setFetchSize。默认值由创建结果集的 Statement 对象设置。提取大小可能随时更改。 Hive JDBC 有它自己的 HiveQueryResultSet with a setFetchSize method .

关于java - Hive 中的 Statement.setMaxRows 与 Statement.setFetchsize 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32399546/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com