It might be a good idea to optimize simple union queries containing map-reduce jobs in at least one of the sub-qeuries.
a query like:
insert overwrite table T1 partition P1
select * from
today creates 3 map-reduce jobs, one for subq1, another for subq2 and
the final one for the union.
It might be a good idea to optimize this. Instead of creating the union
task, it might be simpler to create a move task (or something like a move
task), where the outputs of the two sub-queries will be moved to the final
directory. This can easily extend to more than 2 sub-queries in the union.
This is very useful if there is a select * followed by filesink after the
union. This can be independently useful, and also be used to optimize the
skewed joins –
If there is a select, filter between the union and the filesink, the select
and the filter can be moved before the union, and the follow-up job can
still be removed.