gpt4 book ai didi

hive - 如何在 ORC 分区 Hive 表的中间添加一列,并且仍然能够使用新结构查询旧分区文件

转载 作者:行者123 更新时间:2023-12-02 20:30:43 25 4
gpt4 key购买 nike

目前,我在 Prod 中有一个分区 ORC“托管”(错误地创建为内部优先)Hive 表,其中包含至少 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; 

使用 CASCADE 命令更改表更改列可以更改表元数据的列,并将相同的更改级联到所有分区元数据。

PS - 这会将新列添加到现有列的末尾、分区列之前。不幸的是,ORC 目前还不支持在中间添加列。

希望有帮助!

关于hive - 如何在 ORC 分区 Hive 表的中间添加一列,并且仍然能够使用新结构查询旧分区文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48836371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com