2015-09-04 836 views
1

我正在对Hive/Hadoop运行一个查询,返回100.000行,我想启用setFetchSize,一次没有多少行,我正在使用Hive JDBC驱动程序。如何使用JDBC驱动程序在Hive中设置FetchSize 0.13.0

问题是相同的查询也是针对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

对于您使用'PreparedStatement'而不是普通的'Statement'真的很重要吗?你是否尝试过更新版本的驱动程序? –

+0

嗨@SamsonScharfrichter,我正在运行Hive 0.13.0,当我尝试一个不同的vervion时,例如Apache Hive 0.13.0和驱动程序1.1.0,它不起作用!然后我尝试了不同的版本,但连接仅在使用相同驱动程序版本时才打开。我怎样才能达到同样的效果setFetchSize –

+0

我确定''setFetchSize'适用于Hive 0.13.1中的“Statement”,就像HortonWorks发行版一样。不过,从来没有尝试过使用“PreparedStatement”,也没有使用基础Apache发行版。而且我也确切地知道0.13驱动程序对0.14服务(HortonWorks)都有效。可能与1.1的差距太大而不兼容。 –

回答

0

您是否尝试在resultSet级别上设置,我们当前还在使用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。