遇到“错误无法更改表”。当改变 Hive 中的表列位置时

Posted

技术标签:

【中文标题】遇到“错误无法更改表”。当改变 Hive 中的表列位置时【英文标题】:Encounter "Error Unable to alter table." when alter table column positons in Hive 【发布时间】:2018-07-04 00:09:25 【问题描述】:

我有一张简单的桌子fiction_movie

hive>describe fiction_movie;
OK
title string
actors array<string>
genre string
rating int
4 rows selected (0.03 seconds)

表格内容:

hive> select * from fiction_movie;
OK
avatar  ["zoe saldana","Sam worthington"]   science fiction  7
logan  ["hugh jackman","Patrick stewart"]   science fiction  8
2 rows selected (0.352 seconds)

我想做的是重新排列列位置并将标题放在流派之后:

#I tried
hive>alter table fiction_movie change column title title string after genre;

但它给了我以下错误:

错误:处理语句时出错:FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。无法更改表。以下列的类型与各自位置的现有列不兼容: 演员,流派(状态=08S01,代码=1)

有人知道为什么吗?谢谢!

【问题讨论】:

【参考方案1】:

这段代码在我的机器上运行良好。

hive> create table fiction_movie(
    > title string,
    > actors array<string>,
    > genre string,
    > rating int);
OK
Time taken: 0.155 seconds
hive> alter table fiction_movie change column title title string after genre;
OK
Time taken: 0.4 seconds
hive> describe  fiction_movie;
OK
actors                  array<string>
genre                   string
title                   string
rating                  int
Time taken: 0.37 seconds, Fetched: 4 row(s)

或者尝试设置这个属性。 您可以强制 hive 允许您通过以下方式更改它:

`SET hive.metastore.disallow.invalid.col.type.changes=true;` 

而不是改变你的桌子。

【讨论】:

'SET hive.metastore.disallow.invalid.col.type.changes=true;' 是正确的配置设置吗?从蜂巢 [wiki|cwiki.apache.org/confluence/display/Hive/…,我只看到“hive.metastore.disallow.incompatible.col.type.changes”。请更正。

以上是关于遇到“错误无法更改表”。当改变 Hive 中的表列位置时的主要内容,如果未能解决你的问题,请参考以下文章

决定何时在数据库中的表列上创建索引?

如何将数组从两个不同的表列转换为平行行?

使用 Impala 或 Hive 提取表列中的多个字符串元素

是否可以在 Hive 中的常量列上进行分组?

更新 SQL Server 2005 中的表列

如何根据联接更新 Redshift 中的表列值?