1. 程式人生 > 其它 >hive表新增欄位無法覆蓋寫入內容

hive表新增欄位無法覆蓋寫入內容

今天遇到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/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利.