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

2021-09-25 22:54:27 字數 1668 閱讀 1944

原文:  

最近工作中遇到乙個問題:

對於分割槽表新增字段,向已存在分割槽中插入資料,結果新增欄位的值全部為null。

注:是已存在分割槽,新的分割槽並不會產生該問題;無論是內部表還是外部表均有該問題。

在新增字段之後及時對錶進行msck repair table 仍然存在問題。

問題描述

hive版本:2.2.0

建立分割槽外部表test1

插入資料

檢視資料

新增新的字段name

可以通過alter add,也可以通過alter replace

再次檢視資料

修復表msck repair table test1;

向分割槽20170101插入資料

insert overwrite table test1 partition(pt_d='20170101') values(1,'1xiao'),(2,'1da');

檢視資料

解決方法

解決該問的關鍵是刪除舊分割槽,因為雖然hdfs上的資料更新了,但是我們查詢的時候仍然查詢的是舊的元資料資訊(即mysql中的資訊)

在我們插入完資料之後,需要刪除元資料的舊分割槽

alter table table_name drop partition (pt_d='20170101');

然後有兩種方式恢復資料

1.新增該分割槽

alter table table_name add partition(pt_d='20170101');

或者通過修復分割槽也可以

- 2.修復表結構

msck repair table table_name;

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

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

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

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

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

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