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查不到數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章