我无法通过JDBC对我的hive表进行更新。我能够选择,但不能更新。
连接到配置单元数据库:
Connection connection =
DriverManager.getConnection("jdbc:hive2://localhost:10000/db", "", "");
我的查询:
ResultSet resultSet = statement.executeQuery("update db.test set name='yo yo' where id=1");
堆栈跟踪:
java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:275)
at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:355)
at com.spnotes.hive.App.main(App.java:63)
同样,我能够选择但不能通过JDBC更新。但是,我只能通过hive shell更新我的表。我相信这是一个用户权限问题。我已经看到了其他问题,其中HDFS目录需要在被写入之前被授予权限。
我不得不用我的HDFS用户调用我的hive shell:
sudo -u hdfs hive
我可以通过JDBC以某种方式传递“hfds”用户吗?看起来这不可能。这就是我认为异常不再发生的原因。
以下是传递用户名和密码的“安全方式”:
Connection con = DriverManager.getConnection("jdbc:hive2:/hiveserver.domain.com:10000/default;user=username;password=password");
但这与传递用户hdfs不同。也许可以将“用户名”与更新hive表的权限相关联?
欢迎任何帮助。谢谢!
答案 0 :(得分:0)
您正试图在executeQuery()
中传递更新语句
出于安全原因,使用此方法时,任何更新语句都将失败。将其更改为executeUpdate()
此外,我建议使用准备好的语句,而不是使用这样的查询,因为通过使用参数,您可以减少对SQL注入的攻击