HIVE-16155: No need for ConditionalTask if no conditional map join is created (Rui reviewed by Xuefu)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/37ed5aa5 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/37ed5aa5 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/37ed5aa5 Branch: refs/heads/hive-14535 Commit: 37ed5aa5b1bd733a0e74c55c1707559d78dea087 Parents: e32f662 Author: Rui Li <[email protected]> Authored: Mon Mar 13 12:16:28 2017 +0800 Committer: Rui Li <[email protected]> Committed: Mon Mar 13 12:16:28 2017 +0800 ---------------------------------------------------------------------- .../optimizer/physical/CommonJoinTaskDispatcher.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/37ed5aa5/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java index f7f6d1e..8ed3079 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java @@ -483,12 +483,6 @@ public class CommonJoinTaskDispatcher extends AbstractJoinTaskDispatcher impleme if (!bigTableCandidates.contains(pos)) { continue; } - // deep copy a new mapred work from xml - // Once HIVE-4396 is in, it would be faster to use a cheaper method to clone the plan - MapredWork newWork = SerializationUtilities.clonePlan(currTask.getWork()); - - // create map join task and set big table as i - MapRedTask newTask = convertTaskToMapJoinTask(newWork, pos); Operator<?> startOp = joinOp.getParentOperators().get(pos); Set<String> aliases = GenMapRedUtils.findAliases(currWork, startOp); @@ -498,6 +492,11 @@ public class CommonJoinTaskDispatcher extends AbstractJoinTaskDispatcher impleme continue; } + MapredWork newWork = SerializationUtilities.clonePlan(currTask.getWork()); + + // create map join task and set big table as i + MapRedTask newTask = convertTaskToMapJoinTask(newWork, pos); + // add into conditional task listWorks.add(newTask.getWork()); listTasks.add(newTask); @@ -515,6 +514,10 @@ public class CommonJoinTaskDispatcher extends AbstractJoinTaskDispatcher impleme throw new SemanticException("Generate Map Join Task Error: " + e.getMessage(), e); } + if (listTasks.isEmpty()) { + return currTask; + } + // insert current common join task to conditional task listWorks.add(currTask.getWork()); listTasks.add(currTask);
