hive 外部表 內部表 添加新字段忘了加cascade 導致 舊分區的新字段數據為null問題解決


-- 外部表的情況:
--不管有沒有加cascade字段,新寫的分區數據中都會顯示新加字段的值。
--針對於舊分區,如果加了cascade,那么覆寫舊分區的數據后,新字段可以直接select出來。
-- 如果不加cascade,覆寫舊分區的數據后,新字段仍然是null,
-- 解決辦法1:需要對以前的舊分區執行drop分區然后“add分區或者msck repair”后,才可以select出來。(推薦這種)
-- 解決辦法2:需要對以前的舊分區執行alter table tb_name partition (dt=...) add columns(new_field string)后,才可以select出來。(不推薦這種,因為,如果添加多個字段且都沒有指定cascade,那么必須將所有字段都add columns操作,才能看到正確的數據。如果只添加某一個字段(比如最后一個字段),那么實際select出來后,顯示出來的是按照desc table順序的第一個新字段,這里比較迷惑人。所以還是不如第一種解決辦法一步到位)

-- 內部表的情況:
--不管有沒有加cascade字段,新寫的分區數據中都會顯示新加字段的值。
--針對於舊分區,如果加了cascade,那么覆寫舊分區的數據后,新字段可以直接select出來。
-- 如果不加cascade,覆寫舊分區的數據后,新字段仍然是null,
-- 解決辦法:需要對以前的舊分區執行alter table tb_name partition (dt=...) add columns(new_field string)后,才可以select出來。千萬不能drop partition,因為是內部表,會直接刪除數據的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM