java - 如何使用 JDBC 驱动程序 0.13.0 在 Hive 中设置 FetchSize

标签 java hadoop jdbc hive

我正在针对返回 100.000 行的 Hive/Hadoop 运行查询,并且我想启用 setFetchSize,一次没有那么多行,为此我正在使用 Hive JDBC 驱动程序。

关键是相同的查询也针对 postgres 运行,或者实际上可能在其他关系数据库中运行,因此使用此大小功能来控制它是有意义的。

问题是,当我调用方法 setFetchSize 时,我不断收到以下内容

java.sql.SQLException: 方法不受支持 在 org.apache.hadoop.hive.jdbc.HivePreparedStatement.setFetchSize(HivePreparedStatement.java:1229) ~[hive-jdbc-0.13.0.jar:0.13.0]

不支持此方法,我该如何解决这个问题并实现相同的目标?

最佳答案

您是否尝试在结果集级别进行设置,我们目前也在使用 0.13.0 并且调用 rs.setFetchSize(5000); 对我们来说非常完美。 Spring JdbcTemplate 代码片段是这样的:

hiveJdbcTemplate.query(sqlToExecute, rs -> {
            rs.setFetchSize(5000);
            while (rs.next()){
               ....do you handling
            }
        });

希望这对您有用。默认的 fetchSize 仅为 50,如果您需要获取数百万行,这就太小了。从 Hive 1.3.0 开始,通过将默认值从 50 增加到 1000 解决了这个问题。Apache Hive Jira 票证是:HIVE-11429。

关于java - 如何使用 JDBC 驱动程序 0.13.0 在 Hive 中设置 FetchSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398054/

相关文章:

java - 我们什么时候想注入(inject)类而不是实例?

java - 连接mysql和Java的问题

java - NoRouteToHostException 而 hadoop fs -copyFromLocal

java - HBase:什么是 NotServingRegionException?

java - 在 servlet 和 JSP 之间共享静态数据时选择什么最佳策略?

java - 将Java连接到MySQL数据库

java - 如何测试是否在要测试的方法内创建的对象上调用了方法

java - java程序的编译

java - 可以使用特定按钮振动另一个按钮吗?如何?

hadoop - 从群集到另一台计算机的HDFS文件FTP