Hive分区表增加字段新增字段为NULL解决方案

背景:

数仓开发过程中,经常会有需求变更,添加字段的情况很难免,添加完了字段需要重新写数据,重新将这个字段的数据overwrite进去,但是会出现一个问题,就是加载的数据为NULL。新分区正常,无论是内部表还是外部表均有该问题。 

原因:
使用alter table语句更新表结构时,由于默认更新现有表结构,对原有分区无改动,导致原有分区改变数据时,新字段为NULL

测试过程:

创建测试表:

CREATE TABLE DEFAULT. COMPANYLEVEL_TEST(
IDSTRING,
PARENT_ID STRING, 
LEVEL STRING
)
PARTITIONED BY('UPDATE_DATE' STRING)

插入测试数据:

INSERT OVERWRITE TABLE DEFAULT. COMPANYLEVEL_TEST PARTITION (UPDATE_DATE='2021-11-13')
SELECT ID, PARENT ID, LEVEL FROM DEFAULT. COMPANYLEVEL

数据正常:

Hive分区表增加字段新增字段为NULL解决方案_第1张图片

增加新列:

--增加新列:ALTER TABLE表名ADD CoLUMNS(字段名称数据类型)
ALTER TABLE DEFAULT.COMPANYLEVEL_TEST ADD COLUMNS(PARENT_EVEL STRING)

 插入新数据:

INSERT OVERWRITE TABLE DEFAULT. COMPANYLEVEL_TEST PARTITION(UPDATE_DATE='2021-11-13')
SELECT ID, PARENTID, LEVEL, PARENT_EVEL FROM DEFAULT. COMPANYLEVEL

查看数据是否成功,结果新插入列数据显示为NULL

Hive分区表增加字段新增字段为NULL解决方案_第2张图片

解决办法:

删除所插数据当天分区:

alter table DEFAULT. COMPANYLEVEL_TEST drop partition(UPDATE_DATE='2021-11-13')

再次执行SQL插入数据,结果显示正常。

Hive分区表增加字段新增字段为NULL解决方案_第3张图片

其他:

查阅资料,实际上在添加字段是能够经过CASCADE关键字来避免出现这种问题。

如:alter table table_name add columns(age int) CASCADE

资料:

LanguageManual DDL - Apache Hive - Apache Software Foundation

你可能感兴趣的:(Hive,hive,hadoop,big,data)