HIVE 分区表添加字段后的奇怪现象
2013-12-04 15:01
155 查看
情况:
表: 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
希望能帮助有同样问题的人。
表: 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
希望能帮助有同样问题的人。
相关文章推荐
- hive 分区表 添加新字段 查询为NULL的情况 我也遇到了这个问题
- HIVE分区表新增字段后新增字段值为空,需要带分区加字段
- 修改hive分区表,在分区列前增加一个字段
- MySQL更新varchar字段时的奇怪现象
- Hive 添加表字段,给字段排序
- hive分区表增加字段会导致新增字段无法显示值的BUG
- hive分区表增加字段会导致新增字段无法显示值的BUG
- hive添加分区字段
- hive 添加字段导致数据出错
- hive添加字段报conflicting lock
- Hive分区表添加分区时的注意事项
- 【奇怪现象】用联通访问某些ASP.NET网站会产生__EVENTVALIDATION字段,用电信却只有:__VIEWSTATE。【正常】?原因?
- hive分区表增加字段后,依然查出来为null的处理方式
- Hive分区表新增字段为null的bug及解决方法
- gcc编译含math.h程序的奇怪现象(并非未添加-lm)
- [Hive]Hive分区表新增字段
- hive分区表增加字段新增字段值为空的bug
- 给数据库字段添加注释,并且可以通过sql语句查询
- hive 分区表
- 帝国cms添加修改会员字段时字段名不能带数字,否则注册页会出现空白