Hive 查詢結果和insert結果不一致問題排查

Hive 查詢結果和insert結果不一致問題排查

1.起因

​ 由於公司業務需要,在做近半年業務數據回補的時候,發現存在部分分區數據不符合業務需要,於是,很想當然的重跑腳本,結果發現該部分數據無法正確過濾;

2.問題描述

​ 在對某張表進行操作的時候,發現where條件後面的 xx is not null 條件不能生效,即 我採用 select的方式能夠得到正確的結果,但是,insert時產生的結果卻不一致。

3.解決過程

​ 在發現該問題後,首先覺得是is not null 的用法沒有生效,於是,先將sql用查詢的方式打印結果,發現是正確的,並且用insert到臨時表的方式實驗,發現結果也是正確的,那麼奇怪了,同樣的sql, query的方式結果正確,臨時表結果也正確,只是在線上的腳本中失敗?

​ 於是懷疑是union all的問題(業務需要,多個查詢結果union all 到一個事件表中),在嘗試各種方式後,發現union all也是正確的,最後嘗試刪除這張表重跑試試,結果居然成功了。

4.結論

​ 原來,insert overwrite 在插入分區表的已有分區的表時,如果待插入的查詢結果爲空,那麼insert overwrite不會生效,即 它會保留舊有結果,然後給你造成你的sql 的哪個地方沒有生效的假象。。。。

​ 這個問題暴露了我對hive 甚至 sql的基礎掌握的情況還不夠的事實,主要是踩得坑還不夠多,還是要多鍛鍊呀。。。果然能力是練出來的。

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