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,因爲是內部表,會直接刪除數據的。

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