環境: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;
再次查詢資料,發現插入的資料成功了