遇到的问题:
今天给一个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添加字段