hive表新增欄位無法覆蓋寫入內容
阿新 • • 發佈:2021-08-12
今天遇到hive表新增欄位,以往建表都是建外表,直接drop後,重新建立。
由於這次全部使用內表建立的,所以使用add column功能新增欄位。
alter table xy_dw.dw_transaction_eth add columns(type1 string comment '型別');
但是發現,如果已經存在記錄的情況下覆蓋寫入,新新增的欄位任然為NUll。
如果是新的記錄,則可以寫入。
被坑了兩天(我一直以為我程式哪裡出問題了)終於發現了貓膩。
注意:如果建立的是分割槽表,則在新增新欄位時,必須要帶上cascade,否則該欄位無法進入資料。
根本原因是元資料中帶分割槽表的元資料和hive的實際儲存不一致。
alter table xy_dw.dw_transaction_eth add columns(type1 string comment '型別') cascade;
如果已經添加了欄位,沒有帶cascade怎麼解決呢。
我們可以修改欄位,在修改欄位名時帶上,在修改回來。如下:
alter table xy_dw.dw_transaction_eth change type1type string comment '型別' cascade;
alter tablexy_dw.dw_transaction_eth change type type1 string comment '型別' cascade;
可能使用msck repair table xy_dw.dw_transaction_eth; 也有可能修復,沒測試過。
作者:尤燈塔 出處:https://www.cnblogs.com/30go/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利.