解决hive表新增的字段查询为空null问题

12 篇文章 2 订阅

一、问题点

有一个hive外部表,分区字段是tp和month,新增了几个字段fee_org_id,applied_date_time,pop_coop_mode_type_cd,fee_company后,insert overwrite重跑分区数据,

SELECT * FROM app.app_xxx_indicator_result WHERE tp = 'fs' AND month = '2021-04'

用hive引擎查询如下,新增的几个字段是null

而用presto查询如下,不为null

 

使用alter table语句更新结构时,hive默认更新现有分区元数据,对原来已经存在的分区元数据不会变动,导致已经存在的分区新增字段后,重跑数据时,查询新增的字段值出现为null情况,而后来新增的分区就没有这样的问题

至于presto查询有数据,而hive查询无数据,猜测应该是presto和hive使用的元数据不一样,hive使用自身的存储的元数据,presto没有使用元数据,应该是直接去hdfs获取的最新的表信息。

二、解决方案

1、删除分区后重建分区(推荐)

删除分区

ALTER TABLE app.app_xxx_indicator_result DROP partition(MONTH = '2021-04') ;

重新添加分区 

ALTER TABLE app.app_xxx_indicator_result ADD partition(tp = 'fs', MONTH = '2021-04') ;

此方案,删除分区数据后,分区数不会删除,重新添加分区后,再次查询出来的字段就不为null了。缺点是分区很多的情况下,需要挨个执行

2、删除表后重建表(不建议)

此种方案为下策,删除表代价太大,数据也面临丢失风险,不到万不得已不可取

3、命令修复表分(无效)

有人说msck repair 可以,然而经过测试,无效,查询出来的依然为null

msck repair TABLE app.app_xxx_indicator_result;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值