我可以使用CREATE TABLE或DROP TABLE:
指定模式sqlQuery(odbcConnect("Hive"), "DROP TABLE schema.table;")
但没有使用ALTER TABLE:
sqlQuery(odbcConnect("Hive"), "ALTER TABLE schema.table RENAME TO schema.new_table;")
错误消息:...错误的输入'RENAME'期望在alter exchange partition中'table'附近有KW_EXCHANGE
这也不起作用:
sqlQuery(odbcConnect("Hive"), "USE schema; ALTER TABLE table RENAME TO new_table;")
错误讯息:...'E'缺少EOF靠近'schema'
P.S。最后,我使用INSERT INTO TABLE解决了这个问题。不过,我仍然想知道原问题的答案。
答案 0 :(得分:2)
尝试添加新分区时遇到了同样的问题。但后来我发表了两个声明:" 使用schema_name; "和" alter table table_name(不带schema_name)添加分区...... "一切都很好。 似乎ALTER语句不支持Hive中的模式名称。 试着解释那两个最后的陈述: " USE架构; "然后 " ALTER TABLE表RENAME TO new_table; " 我不知道如何用java编写它,但它与Oracle数据库中的相似: 当你尝试" 立即执行' alter ... smth;改变...... smth_else;' "作为一个声明,它将失败。但是,如果你将它们分开,那么#34; 立即开始执行' alter ..smth;&#39 ;;立即执行' alter ..smth_else&#39 ;;端; " ,在一次交易中完成并且它会成功。
答案 1 :(得分:2)
如果可能,您可以尝试升级到至少Hive 0.14.0。
在Hive 0.14.0中解决了Hive未在ALTER TABLE schema.table语句中处理模式的问题在此问题上请参阅以下JIRA:
https://issues.apache.org/jira/browse/HIVE-9180
如果可以升级,原始的“ALTER TABLE schema.table”命令将起作用。
答案 2 :(得分:0)
上述解决方案对我有用。但它很奇怪,它正在以这种方式工作。
似乎hive代码中存在一个错误,即停止此操作。
我已经完成了以下系列工作。
mktg_dd is the name of our DB
)这是SQL:
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (viewdate='2014-08-01') location 'path/to data';
希望有所帮助。
答案 3 :(得分:0)
如果你有表datbasename.tablename
,则必须先执行stmt.execute("USE databasename");
。