Hive分割槽表增加字段新增字段值為空的bug

2022-04-11 18:38:26 字數 2272 閱讀 2174

**:

hive jira: 

最近在查hive版本問題,發現在hive1.1.0和hive1.2.1上,分割槽表新增欄位後新增字段值為空的情況。

網上查了資料,提供了兩種解決辦法:

1. 修改hive元資料sds表的cd_id欄位,原因是修改表結構後,元資料庫中的sds中該表對應的cd_id會改變,但是該錶分割槽下面對應的cd_id還是原來表的cd_id

2.刪除當前分割槽重建

這兩個辦法都不太適應,辦法1修改元資料庫風險大,辦法2可能會導致資料丟失。

老大給的任務是其他辦法workaround。

通過測試發現如下規律,先給出結論:

在分割槽表裡增加欄位後,向分割槽表插入資料有兩種情況:

1.分割槽在修改表結構前存在

2.分割槽在修改表結構前不存在

對於第二種情況,bug不存在

針對第一種情形,

執行alter table denglg add columns(c3 string);  查分割槽資料新增字段值為空,

需再執行alter table denglg partition(step='1') add columns(c3 string);【假設當前只有step='1'的分割槽】

具體測試如下,可以參考看看

1.新建分割槽表,插入兩個分割槽的資料

create table testtmp.denglg(c1 string, c2 string)partitioned by (step string);  

insert into table testtmp.denglg partition(step='1') select '1','2' from default.dual;  

insert into table testtmp.denglg partition(step='2') select '11','22' from default.dual;  

hive> select * from denglg where step='1';   hive> select * from denglg where step='2';  

ok                                           ok  

1 2 1                              1122 2   

2.新增欄位c3 

alter table denglg add columns(c3 string);  

3.向三個分割槽插入資料

insert into table testtmp.denglg partition(step='1') select '1','2','3' from default.dual;

insert into table testtmp.denglg partition(step='2') select '11','22','33' from default.dual;

insert into table testtmp.denglg partition(step='3') select '111','222','333' from default.dual;

hive> select * from denglg where step='1';

ok1 2 null1

1 2 null1

time taken: 0.122 seconds, fetched: 2 row(s)

hive> select * from denglg where step='2';

ok11 22 null2

11 22 null2

time taken: 0.075 seconds, fetched: 2 row(s)

hive> select * from denglg where step='3';

ok111 222 333 3

time taken: 0.077 seconds, fetched: 1 row(s)

發現分割槽step=3不受影響

4.執行alter table denglg partition(step='1') add columns(c3 string);

hive> select * from denglg where step='1';

ok1 2 null1

1 2 31

time taken: 0.728 seconds, fetched: 2 row(s)

hive> select * from denglg where step='2';

ok11 22 null2

11 22 null2

驗證上述結論正確。

hive分割槽表新增字段出現新增欄位null的bug

對於hive分割槽表,我們使用alter語句新增欄位後 如alter table table name add columns age int 再重寫之前已經存在的分割槽,會出現使用查詢語句查出來的新增字段顯示null值。例如 表a 分割槽dt,已有分割槽dt a 由於需求新增了乙個字段,然後重新寫...

hive分割槽表增加字段新增字段值為空的bug

目錄 1.修改元資料 2.刪除當前分割槽重建 3.更新指定分割槽的元資料 最近在查hive版本問題,發現在hive1.1.0和hive1.2.1上,分割槽表新增欄位後新增字段值為空的情況。網上查了資料,提供了兩種解決辦法 修改hive元資料sds表的cd id欄位,原因是修改表結構後,元資料庫中的s...

Hive分割槽表新增欄位為null的bug及解決方法

解決方法 解決該問的關鍵是刪除舊分割槽,因為雖然hdfs上的資料更新了,但是我們查詢的時候仍然查詢的是舊的元資料資訊 即mysql中的資訊 在我們插入完資料之後,需要刪除元資料的舊分割槽 alter table table name drop partition pt d 20170101 然後有兩...