您的位置:首页 > 其它

hive union all 数据丢失问题优化

2015-07-24 18:07 4207 查看
源语句:

insert overwrite table TEST3
select '19' UNIT_ID, STAFF_CODE,STAFF_ID,STAFF_NAME, 0 LEVEL from TEST1
union all
select tc.CENTER_ID UNIT_ID, th.STAFF_CODE,th.STAFF_ID,th.STAFF_NAME, 1 LEVEL
from TEST2 tc inner join TEST1 th on tc.STAFF_ID=th.STAFF_ID
union all
select tc.STATION_ID UNIT_ID, th.STAFF_CODE,th.STAFF_ID,th.STAFF_NAME, 2 LEVEL
from TEST2 tc inner join TEST1 th on tc.STAFF_ID=th.STAFF_ID
union all
select tc.GROUP_ID UNIT_ID, th.STAFF_CODE,th.STAFF_ID,th.STAFF_NAME, 3 LEVEL
from TEST2 tc inner join TEST1 th on tc.STAFF_ID=th.STAFF_ID;

然后查询:

select distinct LEVEL from TEST3;

结果只有0 1,然后重新执行上面的insert语句后再次查询,结果为0 2;反复尝试多次,结果都是0 1 或者0 2;很明显,数据并没有被全部插入到TEST3中。

百思不得其解,多番尝试后将语句优化如下:

insert overwrite table TEST3
select '19' UNIT_ID, STAFF_CODE,STAFF_ID,STAFF_NAME, 0 LEVEL from TEST1
union all
select tc.UNIT_ID, th.STAFF_CODE,th.STAFF_ID,th.STAFF_NAME, tc.LEVEL
from(
select STAFF_ID, CENTER_ID UNIT_ID, 1 LEVEL from TEST2
union all
select STAFF_ID, STATION_ID UNIT_ID, 2 LEVEL from TEST2
union all
select STAFF_ID, GROUP_ID UNIT_ID, 3 LEVEL from TEST2
) tc inner join TEST1 th on tc.STAFF_ID=th.STAFF_ID;

执行优化后的语句,job数从9减少到5,执行时间大为减少;然后再次查询,结果就是0 1 2 3

虽然问题解决了,但是此时我还是不太能理解这个现象,等我弄明白了再补充记录到本文中,同时也欢迎各位读者指点迷津。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: