Hive增加列结果为NULL
1. 问题描述
hive表使用
ALTER TABLE search_index.middle_model_ware ADD COLUMNS (feature_v3 STRING COMMENT 'idx_64:')
命令新增一列,然后insert overwrite table
到一个历史存在的dt,再次select新增字段时,结果都是null,当insert到一个不存在的分区时,select新增字段是有结果的。
2.原因分析
从wiki上看,alter table有以下注解。
The CASCADE|RESTRICT clause is available in Hive 0.15.0.
ALTER TABLE CHANGE COLUMN 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 change only to table metadata.
alter table默认的选项是RESTRICT
,RESTRICT只会改变原始数据,在执行alter table之前就存在的分区,表结构不会改变,CASCADE
选项则会改变已经存在的分区的结构,新增列的数据会可以select出来了。
ALTER TABLE search_index.middle_model_ware ADD COLUMNS (feature_v3 STRING COMMENT 'idx_64:') cascade;
如果历史partition特别多的话,加上了cascade选项后,执行起来会非常慢,因为需要更新每个partition