重命名 Hive 表中的列时,它会在部署之前删除该列先前数据的所有值

问题描述 投票:0回答:1

我们刚刚继续部署一个基于 Hive 的表。我们将列risk_old重命名为risk_new(重命名)。该表按周期分区。然而,部署后,我们看到了一个奇怪的行为,即所有先前时期的重命名列的所有数据都已被 null 删除/删除。只有较新时期的数据才有价值。这怎么可能?我们如何取回数据。

部署前的示例数据:

id 风险_旧
1234 20230927
2345 20230927
1234 20230928
2345 20230928

部署步骤:

  1. 废除旧日程
  2. 部署新代码(新来源的代码来源发生变化)。
  3. ALTER 语句,用于将列从 risk_old 重命名为 risk_new
  4. 为新工作制定时间表

部署后数据:

id risk_new
1234 20230927
2345 20230927
1234 20230928
2345 20230928
1234 20230929
2345 20230929

我们正在研究新列risk_new如何也可以填充所有期间数据?我们无法恢复更改,因为所有下游应用程序也更改了其代码重命名列以从我们的表中获取数据。 UAT 中的一个问题是,如果我们尝试将表名从risk_new 改回risk_old,它会显示较旧的数据,但不会显示较新的数据。

有关于如何保留所有数据周期的名称列名称的任何线索吗?预先感谢

hive bigdata oozie oozie-coordinator oozie-workflow
1个回答
0
投票

使用存储为镶木地板的表重命名配置单元中的列无法正常工作。因为架构信息存储在文件中,并且当您触发 alter table 语句时架构信息会发生变化,但基础数据不会更改。这显示了该列的奇数/旧值。
干净的解决方案是 -

  1. 使用旧表的新定义创建一个表,并在选择时重命名列

    create table newtable as select id, risk_old as    risk_new,   period from oldtable ;

  2. 放下旧桌子

    drop table oldtable

  3. 更改新表并重命名为旧表。

     alter table newtable rename to oldtable;

© www.soinside.com 2019 - 2024. All rights reserved.