diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java index 9d8c7bc..5233938 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java @@ -204,7 +204,9 @@ private void processLinkedFileDesc(GenMRProcContext ctx, (MapredWork) currTask.getWork(), false, ctx); } - if (!rootTasks.contains(currTask)) { + if (!rootTasks.contains(currTask) + && (currTask.getParentTasks() == null + || currTask.getParentTasks().isEmpty())) { rootTasks.add(currTask); } } @@ -721,7 +723,9 @@ private String processFS(FileSinkOperator fsOp, Stack stack, (MapredWork) currTask.getWork(), false, ctx); } opTaskMap.put(null, currTask); - if (!rootTasks.contains(currTask)) { + if (!rootTasks.contains(currTask) + && (currTask.getParentTasks() == null + || currTask.getParentTasks().isEmpty())) { rootTasks.add(currTask); } } else { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java index c60fb22..902cd92 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRUnion1.java @@ -264,7 +264,9 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx opProcCtx, else { // is the current task a root task if (shouldBeRootTask(currTask) - && (!ctx.getRootTasks().contains(currTask))) { + && !ctx.getRootTasks().contains(currTask) + && (currTask.getParentTasks() == null + || currTask.getParentTasks().isEmpty())) { ctx.getRootTasks().add(currTask); } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java index d1977a9..a850f03 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java @@ -106,7 +106,9 @@ public static void initPlan(ReduceSinkOperator op, GenMRProcContext opProcCtx) List> rootTasks = opProcCtx.getRootTasks(); - if (!rootTasks.contains(currTask)) { + if (!rootTasks.contains(currTask) + && (currTask.getParentTasks() == null + || currTask.getParentTasks().isEmpty())) { rootTasks.add(currTask); } if (reducer.getClass() == JoinOperator.class) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinFactory.java index c9c4be5..71576ba 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinFactory.java @@ -163,8 +163,11 @@ private static void initMapJoinPlan(AbstractMapJoinOperator> rootTasks = opProcCtx.getRootTasks(); - assert (!rootTasks.contains(currTask)); - rootTasks.add(currTask); + if(!rootTasks.contains(currTask) + && (currTask.getParentTasks() == null + || currTask.getParentTasks().isEmpty())) { + rootTasks.add(currTask); + } assert currTopOp != null; opProcCtx.getSeenOps().add(currTopOp); diff --git a/ql/src/test/results/clientpositive/union_remove_10.q.out b/ql/src/test/results/clientpositive/union_remove_10.q.out index 00cdb03..0479af5 100644 --- a/ql/src/test/results/clientpositive/union_remove_10.q.out +++ b/ql/src/test/results/clientpositive/union_remove_10.q.out @@ -152,6 +152,25 @@ STAGE PLANS: expr: _col1 type: bigint outputColumnNames: _col0, _col1 + File Output Operator + compressed: false + GlobalTableId: 1 + table: + input format: org.apache.hadoop.hive.ql.io.RCFileInputFormat + output format: org.apache.hadoop.hive.ql.io.RCFileOutputFormat + serde: org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe + name: default.outputtbl1 + null-subquery2:b-subquery2-subquery2:a-subquery2:inputtbl1 + TableScan + alias: inputtbl1 + Select Operator + expressions: + expr: key + type: string + expr: UDFToLong(2) + type: bigint + outputColumnNames: _col0, _col1 + Union Select Operator expressions: expr: _col0 @@ -167,46 +186,6 @@ STAGE PLANS: output format: org.apache.hadoop.hive.ql.io.RCFileOutputFormat serde: org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe name: default.outputtbl1 - null-subquery2:b-subquery2-subquery2:a-subquery2:inputtbl1 - TableScan - alias: inputtbl1 - Select Operator - expressions: - expr: key - type: string - expr: 2 - type: int - outputColumnNames: _col0, _col1 - Select Operator - expressions: - expr: _col0 - type: string - expr: UDFToLong(_col1) - type: bigint - outputColumnNames: _col0, _col1 - Union - Select Operator - expressions: - expr: _col0 - type: string - expr: _col1 - type: bigint - outputColumnNames: _col0, _col1 - Select Operator - expressions: - expr: _col0 - type: string - expr: _col1 - type: bigint - outputColumnNames: _col0, _col1 - File Output Operator - compressed: false - GlobalTableId: 1 - table: - input format: org.apache.hadoop.hive.ql.io.RCFileInputFormat - output format: org.apache.hadoop.hive.ql.io.RCFileOutputFormat - serde: org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe - name: default.outputtbl1 Stage: Stage-7 Conditional Operator @@ -249,31 +228,17 @@ STAGE PLANS: expressions: expr: key type: string - expr: 1 - type: int + expr: UDFToLong(1) + type: bigint outputColumnNames: _col0, _col1 - Select Operator - expressions: - expr: _col0 - type: string - expr: UDFToLong(_col1) - type: bigint - outputColumnNames: _col0, _col1 - Select Operator - expressions: - expr: _col0 - type: string - expr: _col1 - type: bigint - outputColumnNames: _col0, _col1 - File Output Operator - compressed: false - GlobalTableId: 1 - table: - input format: org.apache.hadoop.hive.ql.io.RCFileInputFormat - output format: org.apache.hadoop.hive.ql.io.RCFileOutputFormat - serde: org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe - name: default.outputtbl1 + File Output Operator + compressed: false + GlobalTableId: 1 + table: + input format: org.apache.hadoop.hive.ql.io.RCFileInputFormat + output format: org.apache.hadoop.hive.ql.io.RCFileOutputFormat + serde: org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe + name: default.outputtbl1 PREHOOK: query: insert overwrite table outputTbl1