RODBC:不能使用ALTER TABLE命令指定模式

时间:2014-10-08 08:23:10

标签: sql r database-schema rodbc

我可以使用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解决了这个问题。不过,我仍然想知道原问题的答案。

4 个答案:

答案 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代码中存在一个错误,即停止此操作。

我已经完成了以下系列工作。

  1. 更改为可以找到表格的目标架构
  2. 使用dbname(mktg_dd is the name of our DB
  3. 运行相同的查询
  4. 这是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");