如果使用alter table add column語句對分區表增加字段時沒有使用cascade關鍵字,會導致Hive只維護了表的元數據,而沒有分區的元數據。
現象就是,重新insert overwrite了歷史有數據的分區,但是select 新增字段仍然沒有數據。
起初,我以爲是BUG,但是查看了官方文檔發現並不是BUG。
官方文檔描述如下:
The CASCADE|RESTRICT clause is available in Hive 1.1.0. ALTER TABLE ADD|REPLACE COLUMNS with CASCADE command changes the columns of a table's metadata, and cascades the same change to all the partition metadata. RESTRICT is the default, limiting column changes only to table metadata.
如上所述,在1.1.0中表和分區的元數據就是分開處理的,在增加字段的時候添加CASCADE能同時更新表和分區 對於,在添加字段的時候沒有指定的cascade的情況,
可以手動使用如下命令來對分區添加 alter table 表名 partition(dt='2019-04-26') add columns(字段名 類型);
然後重新查詢就新增字段就會有數據了。
注意:對於執行了add column語句之後新生成的分區,是不會有問題的,Hive會自動維護新分區中的元數據。