Java Hive 连接 executeUpdate() 始终返回计数为零

Posted

技术标签:

【中文标题】Java Hive 连接 executeUpdate() 始终返回计数为零【英文标题】:Java Hive connection executeUpdate() always returning count as zero 【发布时间】:2018-07-12 07:10:00 【问题描述】:

场景

我正在尝试通过 zookeepers 集群从本地笔记本电脑连接到 Hive 表到远程开发服务器,并尝试更新表列值。 Hadoop 集群和 Hive 表也位于远程开发环境中。 我正在使用 hive-jdbc.jar 版本 2.1.0 和 hadoop-common 版本 2.7.1

问题

面临更新表记录但 stmt.getUpdateCount() 和 stmt.executeUpdate 分别返回 -1 和 0 的问题。 代码: 有什么遗漏吗??或在 Hive 表 getUpdateCount() 行为不同? 感谢任何快速帮助..

代码:

private static String driverName = "org.apache.hive.jdbc.HiveDriver"; 
public static void main(String[] args) throws SQLException, 
ClassNotFoundException    
Class.forName(driverName);
Connection con = 
DriverManager.getConnection("jdbc:hive2://XXXX:XXXX/tibco,
XXXX:XXXX/tibco,XXXX:XXXX/tibco;
serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;
"hive.execution.engine=tez", "hive", "");
Statement stmt = con.createStatement();
con.setAutoCommit(true);
System.out.println("created");
ResultSet rs = stmt.executeQuery("select * from tibco.log_events_poc");
ResultSet db1=stmt.executeQuery("desc tibco.log_events_poc");
System.out.println("tibco.log_events_poc table -->"+db1);
int rowsupdated = stmt.executeUpdate("update tibco.log_events_poc set 
name='sample1'");            
System.out.println("Number of Rows updated"+stmt.getUpdateCount());
System.out.println("Number of Rows updated"+rowsupdated);
stmt.close();           
con.close();
  

【问题讨论】:

【参考方案1】:

You can check out the sources of version 2.1.0。驱动程序完全忽略任何更新计数并始终返回0

@Override
public int executeUpdate(String sql) throws SQLException 
    execute(sql);
    return 0;

相关功能请求在这里:https://issues.apache.org/jira/browse/HIVE-12382

【讨论】:

@pareshBapna:这是一个不同的问题 :-)(我不知道答案)

以上是关于Java Hive 连接 executeUpdate() 始终返回计数为零的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 中的 Hive JDBC 连接

Java采用JDBC的方式连接Hive(SparkSQL)

使用java(eclipse)远程连接hive

Java使用JDBC连接Hive

java程序连接hive数据库遇到的问题

java代码实现 kerberos认证hive连接