关闭

HIVE 分区表添加字段后的奇怪现象

10521人阅读 评论(6) 收藏 举报
分类:

情况:

表: test_table

已有字段 (a,b,c)

已有分区:

day_key=20131201

day_key=20131202

day_key=20131203

 

需求是需要添加一个字段d

并且重新生成 所有分区的数据

 

步骤

1.添加字段:

alter table test_table add columns (d string);

2.执行语句

insert overwrite table test_table

select ....

 

此时问题产生了:

发现 新加的字段d 列 生成出来的数据

在已有的分区中

全是NULL

 

解决办法2个:

A.直接在hive里面解决

删除对应的分区 day_key=20131201

alter table test_table drop partition (day_key='20131201');

然后再次生成数据 发现d列的数据产生了。

 

B.修改元数据库

修改SDS表 老分区对应的 CD_ID

与表的 CD_ID 保持一致。

在元数据库查询:

select * from SDS where LOCATION like '%tb_name%'\G

我们可以看到  所有分区 以及表 对应的CD_ID 

如果我们对字段进行了修改

新生成分区的   CD_ID  的最新的 (与COLUMS表的一致)

而老分区 (不管你重新插入数据多少次) 都是与表(TBLS)的TBL_ID保持一致的!!

 

当我们重新计算数据之后 又不想重建分区

只需 :

update SDS set CD_ID=119 where SD_ID=116;

其中 119为其它新分区的 CD_ID  116 为表的TBL_ID

 

当然后面如果再次 add columns

也可以用同样的办法

update SDS set CD_ID=120 where SD_ID=119;

其中 120 为其它新分区的 CD_ID   119 为表之前过期的CD_ID

 

希望能帮助有同样问题的人。

 

 

 

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1483566次
    • 积分:12355
    • 等级:
    • 排名:第1134名
    • 原创:191篇
    • 转载:84篇
    • 译文:2篇
    • 评论:68条
    最新评论