遇到的问题:
今天给一个hive表增加一个新字段,使用如下语句
alter table industry_db.product
add columns(industry_id string comment ‘行业id);hive数据库表,显示了新增加的字段,我以为添加成功。但如果hive数据表p_date="20200306" 已经有旧的分区 的industry_id将为空且无法更新,即便insert overwrite该分区也不会生效。
但是这种方法还在 新的分区生效,就是以前没运行过的分区。比如我们把p_date作为分区标识符,今天是20200306这个分区。如果在20200307这个分区就可以,但是在20200306已经运行过的分区就不行。
解决方法:
解决方法需要在增加industry_id时加上cascade关键字。新增字段含义如下:
cascade为“级联”,不仅变更新分区的表结构(metadata),同时也变更旧分区的表结构。
alter table industry_db.product
add columns(industry_id string comment ‘行业id) cascade;如果已经执行添加操作,并且没有带cascade,可以尝试下面的方法:
1、使用replace 恢复表结构,这样历史的分区数据都不会消失
alter table industry_db.product replace
columns(product_name string comment ‘产品名’);
2、然后再使用带cascade添加字段
本文介绍在Hive中正确添加新字段的方法,特别是如何使用cascade关键字来确保新字段能够被正确地添加到所有分区中,包括已存在的旧分区。此外,还提供了如果忘记使用cascade时的一种解决方案。
6587

被折叠的 条评论
为什么被折叠?



