最近使用hive的时候发现,当修改已存在的表,添加另外的列,然后插入数据,发现新插入的数据中,里面的新列数据皆为NULL。(当前hive版本为2.1.0)
查了一下资料,发现hive的元数据表SDS中,该表的CD_ID值为旧值,在更新表结构后该CD_ID有改动。
解决办法:
1.如果要解决这个问题,可以手动的修改SDS表中该数据表对应的CD_ID值。
2.可以手动的给该表的分区加上新增的列,如:
alter table student partition(sex='boy') add columns(newColumnName string);
3.删除分区后重建。
以上的方法,根据情况使用,如果是重要的表一般不建议直接操作hive元数据表,而如果分区很多的话,添加新增列或者直接删除分区后重建操作也比较繁琐。
需注意的是如果使用spark连接hive,会发现修改后再插入也能查到正确的数据。