具有Parquet数据格式的配置单元表重新排序列

2lpgd968  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(380)

我们使用的是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
qpgpyjmq

qpgpyjmq1#

ALTER TABLE ... REPLACE COLUMNS 在元数据级别(metastore)上工作。
新列顺序与实际数据不匹配。
对于parquet,您会得到一个异常,对于textfile,您会得到null值。
您应该使用另一种解决方案-使用视图。

hec6srdp

hec6srdp2#

这篇文章有点老了,不过,我想如果有类似的问题会对别人有好处的!
您可以尝试以下更改列方法: ALTER TABLE test_parquet CHANGE COLUMN age age int FIRST; 这会将列移到第一个,否则,如果要在某个列之后重新排序,下面会有所帮助: ALTER TABLE test_parquet CHANGE COLUMN name name string AFTER age;

相关问题