簡體   English   中英

無法通過JDBC更新配置單元表

[英]Unable to update hive table via JDBC

我無法通過JDBC對配置單元表進行更新。 我可以選擇,但不能更新。

連接到配置單元數據庫:

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更新。 但是,我只能通過配置單元外殼更新我的表。 我相信這是用戶權限問題。 我還看到了其他問題,在將HDFS目錄寫入之前,需要授予該目錄權限。

我必須這樣用我的HDFS用戶調用配置單元外殼程序:

sudo -u hdfs hive

我可以以某種方式通過JDBC傳遞“ hfds”用戶嗎? 看起來這是不可能的。 這就是我認為異常不會再發生的方式。

這是這樣傳遞用戶名和密碼的“安全方式”:

Connection con = DriverManager.getConnection("jdbc:hive2:/hiveserver.domain.com:10000/default;user=username;password=password");

但是,這與傳遞用戶hdfs不同。 也許可以將“用戶名”鏈接到更新配置單元表的權限?

歡迎任何幫助。 謝謝!

您正試圖在executeQuery()傳遞更新語句。出於安全原因,使用此方法時,任何更新語句都將失敗。 將其更改為executeUpdate()

另外,建議不要使用類似Prepared Statements的查詢 ,因為通過使用參數,可以減少SQL注入的攻擊性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM