hive union底层原理,union与union all再group by的性能对比

union:将多个结果集合并为一个结果集,结果集去重。

union all:将多个结果集合并为一个结果集,结果集不去重。

本次测试将四份数据去重合并,其中一份数据使用了grouping sets,所以这份数据是单独进行了一次reduce。

两种写法:一种是采用union的方法,另一种是采用union all再进行group by的方法(将不去重的结果集利用group by去重)。

接下来直接看执行逻辑图和map、reduce个数。

第一种写法union:

hive union底层原理,union与union all再group by的性能对比_第1张图片

hive union底层原理,union与union all再group by的性能对比_第2张图片第二种写法union all再group by:

hive union底层原理,union与union all再group by的性能对比_第3张图片

hive union底层原理,union与union all再group by的性能对比_第4张图片

首先从执行逻辑图就可以看出来union all再group by转换为mr后的执行步骤要少了两次reduce。再对比map、reduce个数,map个数是一样的,其中一份数据的grouping sets分别对应reduce11,reduce7。除去map和一份数据的grouping sets的任务数。union还有830+421+237 = 1488 个任务数,而第二种写法只有862个任务数。

总结:第二种写法性能要好。union写法每两份数据都要先合并去重一次,再和另一份数据合并去重,会产生较多次的reduce。第二种写法直接将所有数据合并再一次性去重。

在此举例两种写法:

一:

select id,name from t1
union
select id,name from t2
union
select id,name from t3

二:

select
    all.id
    ,all.name
from(
    select id,name from t1
    union all
    select id,name from t2
    union all
    select id,name from t3
)all
group by
    all.id
    ,all.name

你可能感兴趣的:(hive)