我们使用的是hive1.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
2条答案
按热度按时间qpgpyjmq1#
ALTER TABLE ... REPLACE COLUMNS
在元数据级别(metastore)上工作。新列顺序与实际数据不匹配。
对于parquet,您会得到一个异常,对于textfile,您会得到null值。
您应该使用另一种解决方案-使用视图。
hec6srdp2#
这篇文章有点老了,不过,我想如果有类似的问题会对别人有好处的!
您可以尝试以下更改列方法:
ALTER TABLE test_parquet CHANGE COLUMN age age int FIRST;
这会将列移到第一个,否则,如果要在某个列之后重新排序,下面会有所帮助:ALTER TABLE test_parquet CHANGE COLUMN name name string AFTER age;