RODBC:无法使用 ALTER TABLE 命令指定架构

Posted

技术标签:

【中文标题】RODBC:无法使用 ALTER TABLE 命令指定架构【英文标题】:RODBC: can't specify schema with ALTER TABLE command 【发布时间】:2014-10-08 08:23:09 【问题描述】:

我可以使用 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' 期望 KW_EXCHANGE 在 alter exchange 分区中的 'table' 附近

这也不起作用:

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

错误消息:...在 ';' 处缺少 EOF靠近“模式”

附:最后,我使用 INSERT INTO TABLE 解决了这个问题。不过,我仍然想知道原始问题的答案。

【问题讨论】:

【参考方案1】:

如果可能,您可以尝试至少升级到 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”命令将起作用。

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 @BarbaraLaird:“使用更新的版本,这就是为什么”似乎是一个完全合理的答案:它允许直接解决并解释必要性。 “你用的是什么版本?”不过,这将是一个评论。【参考方案2】:

我在尝试添加新分区时遇到了同样的问题。但后来我发出了 2 条语句:“use schema_name;”和“alter table table_name(without schema_name) add partition...”,一切正常。 似乎 ALTER 语句不支持 Hive 中的模式名称。 尝试分别执行最后两个语句: "USE schema;" 然后 "ALTER TABLE 表重命名为 new_table;" 我不知道如何用java编写它,但它与我们在Oracle数据库中的非常相似: 当您尝试“execute immediate 'alter ...smth; alter... smth_else;'” 作为一个语句时,它将失败。但是如果你像这样分开它们 "begin execute immediate 'alter ..smth;'; execute immediate 'alter ..smth_else'; end;" ,在一个事务中执行它就会成功。

【讨论】:

我不确定如何在 Hive 中应用您建议的方法。 这对我有用!它比说升级更好。【参考方案3】:

上述解决方案对我有用。但很奇怪,它是以这种方式工作的。

似乎 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';

希望对您有所帮助。

【讨论】:

“mktg_dd”是做什么的?【参考方案4】:

如果您有表datbasename.tablename,则必须先执行stmt.execute("USE databasename");

【讨论】:

以上是关于RODBC:无法使用 ALTER TABLE 命令指定架构的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 ALTER TABLE 添加 FOREIGN KEY 约束

RODBC 查询不返回数据

PostgreSQL ALTER TABLE 命令

使用 alter table 更改日期格式

PostgreSQL ALTER TABLE 命令

PostgreSQL ALTER TABLE 命令