Hive增加列结果为NULL

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

3.参考文献

wiki

blog

    原文作者:哟嚯嚯嚯嚯
    原文地址: https://www.jianshu.com/p/bf181af66bdd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞