我们刚刚继续部署一个基于 Hive 的表。我们将列risk_old重命名为risk_new(重命名)。该表按周期分区。然而,部署后,我们看到了一个奇怪的行为,即所有先前时期的重命名列的所有数据都已被 null 删除/删除。只有较新时期的数据才有价值。这怎么可能?我们如何取回数据。
部署前的示例数据:
id | 风险_旧 | 期 |
---|---|---|
1234 | 高 | 20230927 |
2345 | 低 | 20230927 |
1234 | 高 | 20230928 |
2345 | 低 | 20230928 |
部署步骤:
部署后数据:
id | risk_new | 期 |
---|---|---|
1234 | 20230927 | |
2345 | 20230927 | |
1234 | 20230928 | |
2345 | 20230928 | |
1234 | 高 | 20230929 |
2345 | 低 | 20230929 |
我们正在研究新列risk_new如何也可以填充所有期间数据?我们无法恢复更改,因为所有下游应用程序也更改了其代码重命名列以从我们的表中获取数据。 UAT 中的一个问题是,如果我们尝试将表名从risk_new 改回risk_old,它会显示较旧的数据,但不会显示较新的数据。
有关于如何保留所有数据周期的名称列名称的任何线索吗?预先感谢
使用存储为镶木地板的表重命名配置单元中的列无法正常工作。因为架构信息存储在文件中,并且当您触发 alter table 语句时架构信息会发生变化,但基础数据不会更改。这显示了该列的奇数/旧值。
干净的解决方案是 -
使用旧表的新定义创建一个表,并在选择时重命名列
create table newtable as select id, risk_old as risk_new, period from oldtable ;
放下旧桌子
drop table oldtable
。
更改新表并重命名为旧表。
alter table newtable rename to oldtable;