Hive的联级(cascade)-新增字段(column)后,旧分区无法更新数据问题

当在Hive中新增字段时,如果使用ADD COLUMNS命令,旧分区的字段不会更新。通过添加CASCADE关键字,可以确保旧分区的表结构也得到更新。这在Hive 1.1.0及更高版本中可用,但某些低版本可能不支持,需要通过备份、删除和重新插入数据来实现。
摘要由CSDN通过智能技术生成

转载博客地址:https://blog.csdn.net/elecjack/article/details/89391244

问题描述:

实际应用中,常常存在修改数据表结构的需求,比如:增加一个新字段。

如果使用如下语句新增列,可以成功添加列col1。但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区中的col1将为空且无法更新,即便insert overwrite该分区也不会生效。

alter table tb add columns(col1 string);

 
 
 

解决方法:

解决方法很简单,就是增加col1时加上cascade关键字。示例如下:

alter table tb add columns(col1 
对于 Hive 分区表,如果你在表结构中新增了一个字段,那么对于已经存在的历史分区,这个新字段是不会被自动识别的。这是因为 Hive 在创建分区表时,会将分区信息存储在 metadata 中,而这些 metadata 是不会随着表结构的变化而自动更新的。 如果你想要查询或者更新历史分区数据时能够识别到这个新字段,需要手动更新 metadata。具体来说,可以通过以下两种方式实现: 1. 使用 `MSCK REPAIR TABLE` 命令,该命令可以检查分区目录,将分区信息更新到 metadata 中。执行该命令时,Hive 会扫描表对应的 HDFS 目录,并将其中的所有分区信息添加到 metadata 中。 例如,如果你的分区表定义如下: ``` CREATE TABLE example ( id INT, name STRING ) PARTITIONED BY (dt STRING, country STRING); ``` 然后你新增了一个字段 `age INT`,那么你可以使用以下命令更新 metadata: ``` MSCK REPAIR TABLE example; ``` 2. 手动添加分区信息到 metadata 中。如果你只需要更新某个特定分区的 metadata,可以使用以下命令手动添加分区信息到 metadata 中: ``` ALTER TABLE example ADD PARTITION (dt='20211010', country='CN') LOCATION '/path/to/partition'; ``` 执行该命令后,分区目录会被添加到 metadata 中,然后你就可以使用新字段查询和更新分区数据了。 总之,无论是使用 `MSCK REPAIR TABLE` 还是手动添加分区信息,都需要注意及时更新 metadata,以便能够正常查询和更新历史分区数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值