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查不到数据。

猜你喜欢

转载自blog.csdn.net/a6822342/article/details/106051260
今日推荐