hive 分区表添加字段后,字段结果为null

2022-12-12 21:30:19 浏览数 (1)

问题现象

由于业务需要,添加了在hive原来的表上增加了新字段(alter table partition_test add columns(ads string); ),添加一段时间后发现,新分区的数据查询正常。但是发现涉及以前的分区,新增字段的值都是null。

开始的时候,以为是老分区文件中没有该字段的值导致的,重新跑批生成数据,发现老分区中的字段还是为null。

查看表结构,发现也是有新添加的字段,也就是表的元数据中有新增字段。

问题原因

新增字段后,之前的分区没有同步到新的字段结构,使用的还是之前的元数据信息。而新生成的分区使用的新字段结构的元数据。hive在select分区表的数据时,会根据分区元数据字段去hdfs文件中读取对应字段值。而老分区中没有新字段的元数据,所以没有取到相关值,显示为null 。

解决方案

同步老分区的元数据字段结构。

参考命令:

代码语言:javascript复制
alter table partition_test partition(dt='a') add columns(ads string);

同步老分区的元数据后,即可查询到。

后续添加字段的时候,命令里面加cascade就行了,例如:alter table partition_test add columns(col1 string) cascade 。就能同步老分区的字段了。该问题就是hive的联级问题。

参考:

https://cwiki.apache.org/confluence/display/hive/languagemanual ddl

https://blog.csdn.net/mhtian2015/article/details/80855858

0 人点赞