Hive分区表新增字段后用MR查询为null的bug及解决方法

1、问题描述

最近工作需要,需对近两个月hive分区表增加新的字段(公司平台,hive版本2.*),
利用alter table table_name add columns (col_name string ) 新增字段后,向已存在分区中插入数据,结果新增字段的值全部为null。

2、问题追溯

首先用MR引擎查询为空,结果如下:
MR查询引擎结果
怀疑是不是数据没有插入,但是看日志明显已经写入成功了;
然后换了SPARKSQL 和presto 两种引擎查询,有趣的是两个结果都有值,如果直接到目录下查看数据文件会发现确实有值。
presto
sparlsql
原因:是hive版本自身的BUG据说最新的hive已经没有这个问题了(待验证)。原因是增加列,插入数据后,hive元数据库中的SDS中该表对应的CD_ID会改变,但是该表分区下面对应的CD_ID还是原来表的CD_ID字段,用hive本身的MR引擎查询还是原来的数据。

3、解决办法

后来看网上说用msck repair table table_name;修复表命令,其实不起作用(也可能是hive版本问题);后来想直接在presto和sparkSQL下执行插入命令,也不行。最后总结或者试验了以下3个方法:

1.修改元数据

本人没有尝试,直接修改元数据风险较大。可参考https://blog.csdn.net/gxd520/article/details/92791487

2.删除分区或者重新建表

只要对原表结构做了修改(涉及存储格式或者文件的)就可以。

3. 新增字段语句加cascade

alter table table_name add columns (col_name STRING) cascade;

再进行插入即可生效(如果要调整字段位置,也加cascade)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值