Hive分区表新增字段为null的bug及解决方法

最近工作中遇到一个问题:
对于分区表添加字段,向已存在分区中插入数据,结果新增字段的值全部为null。
注:是已存在分区,新的分区并不会产生该问题;无论是内部表还是外部表均有该问题。

在新增字段之后及时对表进行msck repair table 仍然存在问题。

问题描述

Hive版本:2.2.0

创建分区外部表test1

create external table test1(id int) partitioned by (pt_d varchar(11)) location '/user/test1'

这里写图片描述

插入数据

insert into table test1 partition(pt_d='20170101') values(1),(2);

这里写图片描述

查看数据

select * from test1;

这里写图片描述

添加新的字段name

可以通过alter add,也可以通过alter replace

alter table test1 replace columns (
    id int
   ,name string
);

这里写图片描述

再次查看数据

select * from test1;

这里写图片描述

修复表

msck repair table test1;

这里写图片描述

向分区20170101插入数据

insert overwrite table test1 partition(pt_d='20170101') values(1,'1xiao'),(2,'1da');

查看数据

select * from test1;

这里写图片描述

解决方法

解决该问的关键是删除旧分区,因为虽然HDFS上的数据更新了,但是我们查询的时候仍然查询的是旧的元数据信息(即Mysql中的信息)
在我们插入完数据之后,需要删除元数据的旧分区

alter table table_name drop partition (pt_d='20170101');

然后有两种方式恢复数据

  • 1.添加该分区
alter table table_name add partition(pt_d='20170101');

或者通过修复分区也可以
- 2.修复表结构

msck repair table table_name;

再次查看数据,发现插入的数据成功了!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值