hive column name alter不丢失分区avro表中的数据



我有一个avro hive表,按日期分区。

acct_no <string> acct_cd <int>  date <date>
acct01           01             2022-10-31
acct02           02             2022-10-31 
acct03           03             2022-10-31  

我想把acct_cd重命名为account_code

i used command

alter table <table_name> change acct_cd account_code int;

它改变了table属性,但是数据丢失了:

acct_no <string> account_code <int>  date <date>
acct01         null                  2022-10-31
acct02         null                  2022-10-31 
acct03         null                  2022-10-31 

如何避免数据丢失和更改列名?

每个hive, hive,change列名称只是更改hive元数据,底层数据/结构保持原样。这意味着,您必须在更改后处理数据。

你有两个选择

  1. 创建备份表。删除原始表。新建一个表,使用新的列名,并从备份表插入到新表中。
  2. 创建备份表。重命名原表中的列。使用insert overwrite table命令从备份表中填充原表

最新更新