hive表更改元数据之后未选择级联,在查询时spark引擎和hive/tez引擎查询结果不一致问题

最近在工作中遇到一个问题:他人修改了数据表之后(加了两个字段,但是没有选择级联更改),用spark引擎查是可以查到数据,用tez/hive来查新增的两个字段的值是null值。

最后发现是分区的元数据和表的元数据不一致导致的,分区的元数据少了新增的两个字段,所以查出来数据是null。

下面是两段代码,分别查表的元数据信息和分区的元数据信息:

#查表的元数据信息
desc table_name;
#查对应分区的元数据信息
desc table_name partition(分区字段='分区值')

对比发现各自元数据的不一致。

那么发现了问题,如何进行修正呢?

总不能把表删掉重建吧,世上也没有后悔药,能让你在进行更改字段的时候选择级联更改。

那该怎么办呢?解决办法如下:

alter table tablename change 字段名 字段名 字段类型 cascade;

重新修改字段类型,再改回来,这样就能刷新所有分区的元数据了。

问题解决!

 

疑问:为什么当时更改完字段之后,spark能查到数据而tez\hive却查不到呢?

个人猜想:可能spark sql查询的时候使用的表的元数据去进行查询,而tez\hive用的是对应分区的元数据去查询,所以spark能查到数据而hive\tez查不到数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值