天天看點

Hive分區表新增字段為null的bug及解決方法

環境:hive-1.1.0-cdh5.13.0

重跑 insert overwrite table tablename partition(dt=’${dt}’) …新加的字段為null的問題:
  • 執行修改表語句:

    alter table table_name add columns(newCol string comment ‘新加的字段’);

  • 重新insert overwrite 曆史已存在的分區後發現 newCol字段為null,新分區正常,無論是内部表還是外部表均有該問題。
  • 在新增字段之後及時對表進行msck repair table 仍然存在問題

原因:

使用alter table語句更新結構時,由于預設更新現有表結構,對原有分區無改動,導緻原有分區改變資料時,新字段為null

解決辦法:

删除舊分區,因為雖然HDFS上的資料更新了,但是我們查詢的時候仍然查詢的是舊的中繼資料資訊(即Mysql中的資訊)

  • 在插入完資料後,需要删除中繼資料的舊分區

    alter table table_name drop partition (dt=‘dt’);

  • 修複分區的兩種方式:

    添加該分區

    alter table table_name add partition(dt=‘dt’);

    通過修複分區也可以

    msck repair table table_name;

再次查詢資料,發現插入的資料成功了