我们使用的是配置单元1.1.0,要求重新排序具有100列的巨大表之一的列,以提高用户的可读性。但是,当我们对表中的列进行重新排序时,其失败并显示以下错误。
替换列的替代方法是在表上创建视图。
hive> desc test_parquet;
OK
name string
age int
dept string
salary string
city string
# Partition Information
# col_name data_type comment
city string
Time taken: 0.053 seconds, Fetched: 10 row(s)
hive> ALTER TABLE test_parquet REPLACE COLUMNS (age int,name string, dept string, salary string);
OK
Time taken: 0.451 seconds
hive> desc test_parquet;
OK
age int
name string
dept string
salary string
city string
# Partition Information
# col_name data_type comment
city string
Time taken: 0.051 seconds, Fetched: 10 row(s)
hive> select * from test_parquet;
OK
Failed with exception java.io.IOException:java.lang.UnsupportedOperationException: Cannot inspect org.apache.hadoop.io.IntWritable
Time taken: 0.121 seconds
ALTER TABLE ... REPLACE COLUMNS
在元数据级别(元存储)上工作。新的列顺序与实际数据不匹配。对于实木复合地板,您将获得一个例外;对于文本文件,您将获得NULL值。您应该使用替代解决方案-使用视图。
这篇文章有点老了,但是,我认为如果有类似的问题,它将使其他人受益!
您可以尝试下面的更改列方法:
[ALTER TABLE test_parquet CHANGE COLUMN age age int FIRST;
会将列移至第一,否则,如果您想在特定列之后重新排序,下面将有所帮助:
ALTER TABLE test_parquet CHANGE COLUMN name name string AFTER age;