如何在orc分区配置单元表的中间添加列,并且仍然能够查询具有新结构的旧分区文件

ioekq8ef  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(470)

目前,我在prod中有一个分区的orc“managed”(错误地创建为internal first)配置单元表,其中至少有100天的数据按年、月、日(约16gb的数据)分区。
这个表大约有160列。现在我的要求是在这个表的中间添加一列,并且仍然能够查询旧数据(分区文件)。如果新添加的列显示旧数据为null,这是很好的。
到目前为止我做了什么?
1) 在删除之前,首先使用下面的命令将表转换为外部数据文件以保留数据文件

alter table <table_name> SET TBLPROPERTIES('EXTERNAL'='TRUE');

2) 删除并重新创建中间有新列的表,然后更改表以添加分区文件
但是,我无法在重新创建后读取表。我收到此错误消息

[Simba][HiveJDBCDriver](500312) Error in fetching data rows: *org.apache.hive.service.cli.HiveSQLException:java.io.IOException: java.io.IOException: ORC does not support type conversion from file type array<string> (87) to reader type int (87):33:32;

还有别的办法吗?

myzjeezk

myzjeezk1#

无需删除并重新创建表。只需使用以下语句。

ALTER TABLE default.test_table ADD columns (column1 string,column2 string) CASCADE;

alter table change column with cascade命令更改表元数据的列,并将相同的更改级联到所有分区元数据。
ps-这将在现有列的末尾但在分区列之前添加新列。不幸的是,orc现在还不支持在中间添加列。
希望有帮助!

相关问题