2014-10-08 71 views
1

模式,我可以指定與CREATE TABLE或DROP TABLE模式:RODBC:不能指定使用ALTER TABLE命令

sqlQuery(odbcConnect("Hive"), "DROP TABLE schema.table;") 

但與ALTER TABLE:

sqlQuery(odbcConnect("Hive"), "ALTER TABLE schema.table RENAME TO schema.new_table;") 

錯誤消息:.. .mismatched輸入「重命名」在調整人民幣分區

期待KW_EXCHANGE附近「表」這並沒有工作,要麼:

sqlQuery(odbcConnect("Hive"), "USE schema; ALTER TABLE table RENAME TO new_table;") 

錯誤消息:...在';'處缺少EOF 'schema'附近

P.S.最後,我使用INSERT INTO TABLE解決了這個問題。不過,我仍然想知道原始問題的答案。

回答

2

如果可能,您可以嘗試升級至少Hive 0.14.0。

Hive未處理ALTER TABLE schema.table語句中的模式的問題已在Hive 0.14中解決。0參見下面的JIRA在這個問題上:

https://issues.apache.org/jira/browse/HIVE-9180

如果你可以升級,原來的 「ALTER TABLE schema.table」 命令將工作。

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – 2015-04-17 00:25:03

+0

@BarbaraLaird:「使用更新的版本,這是爲什麼」看起來像是一個完全合法的答案:它允許直接解析並解釋必要性。 「你用什麼版本?」儘管如此,這將是一個評論。 – 2015-04-17 01:28:37

2

我在嘗試添加新分區時遇到了同樣的問題。但後來我發出了兩條語句:「use schema_name;」和「alter table table_name(without schema_name)add partition ...」,一切正常。 似乎ALTER語句不支持Hive中的模式名稱。 嘗試separetely exexute那些2所最後陳述: 「使用架構;」,然後 「ALTER TABLE表重命名爲NEW_TABLE;」 我不知道如何把它寫在Java中,但它是非常相似什麼我們在Oracle數據庫中有: 當您嘗試「立即執行」時alter ... smth; alter ... smth_else;'「作爲一個聲明它會失敗。但是,如果你將它們分開,「開始立即執行'alter ..smth;';立即執行'alter ..smth_else'; end;」,在一個事務中執行並且它會成功。

+0

我不知道如何應用您在Hive中建議的方法。 – Mikhail 2014-10-14 11:31:54

+0

這對我有用!它比說升級更好的答案。 – 2015-08-18 00:19:51

0

上述解決方案適用於我。但這很奇怪,它正在以這種方式工作。

似乎在配置單元代碼中存在一個錯誤,它會阻止它。

我已經做了以下幾件事。

  1. 更改到目標模式在那裏你可以找到表
  2. 使用DBNAME(mktg_dd is the name of our DB
  3. 運行相同的查詢

這裏的SQL:

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (viewdate='2014-08-01') location 'path/to data'; 

希望這有助於。

+0

「mktg_dd」是做什麼的? – Mikhail 2014-10-16 06:57:18

0

如果你有表datbasename.tablename你必須先執行stmt.execute("USE databasename");