目前,我有一个分区的orc"托管"(错误地创建为内部第一(hive table in Prod,至少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;
其他方法可以做到这一点吗?
无需掉落并重新创建表。只需使用以下语句。
ALTER TABLE default.test_table ADD columns (column1 string,column2 string) CASCADE;
使用级联命令的Alter表更改列更改表的元数据的列,并对所有分区元数据进行了相同的更改。
ps - 这将在现有列的末端(但在分区列之前(添加新列。不幸的是,兽人不支持目前中间添加列。
希望有帮助!