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 命令指定架构的主要内容,如果未能解决你的问题,请参考以下文章