Author: hashutosh
Date: Tue Feb 24 05:15:09 2015
New Revision: 1661839

URL: http://svn.apache.org/r1661839
Log:
HIVE-9723 : CBO (Calcite Return Path): Translate Union to Hive Op [CBO branch] 
(Jesus Camacho Rodriguez)

Modified:
    
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java

Modified: 
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java
URL: 
http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java?rev=1661839&r1=1661838&r2=1661839&view=diff
==============================================================================
--- 
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java
 (original)
+++ 
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java
 Tue Feb 24 05:15:09 2015
@@ -55,6 +55,7 @@ import org.apache.hadoop.hive.ql.optimiz
 import 
org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil.JoinPredicateInfo;
 import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin;
 import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSort;
+import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveUnion;
 import org.apache.hadoop.hive.ql.parse.JoinCond;
 import org.apache.hadoop.hive.ql.parse.JoinType;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
@@ -68,6 +69,7 @@ import org.apache.hadoop.hive.ql.plan.Op
 import org.apache.hadoop.hive.ql.plan.PlanUtils;
 import org.apache.hadoop.hive.ql.plan.ReduceSinkDesc;
 import org.apache.hadoop.hive.ql.plan.SelectDesc;
+import org.apache.hadoop.hive.ql.plan.UnionDesc;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -143,6 +145,8 @@ public class HiveOpConverter {
       return visit(hj);
     } else if (rn instanceof HiveSort) {
       return visit((HiveSort) rn);
+    } else if (rn instanceof HiveUnion) {
+      return visit((HiveUnion) rn);
     }
     LOG.error(rn.getClass().getCanonicalName() + "operator translation not 
supported"
             + " yet in return path.");
@@ -289,6 +293,37 @@ public class HiveOpConverter {
     return inputOpAf.clone(resultOp);
   }
 
+  OpAttr visit(HiveUnion unionRel) throws SemanticException {
+    // 1. Convert inputs
+    OpAttr[] inputs = new OpAttr[unionRel.getInputs().size()];
+    for (int i=0; i<inputs.length; i++) {
+      inputs[i] = dispatch(unionRel.getInput(i));
+    }
+
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("Translating operator rel#" + unionRel.getId() + ":" + 
unionRel.getRelTypeName() +
+              " with row type: [" + unionRel.getRowType() + "]");
+    }
+
+    // 2. Create a new union operator
+    UnionDesc unionDesc = new UnionDesc();
+    unionDesc.setNumInputs(inputs.length);
+    ArrayList<ColumnInfo> cinfoLst = createColInfos(inputs[0].inputs.get(0));
+    Operator<?>[] children = new Operator<?>[inputs.length];
+    for (int i=0; i<children.length; i++) {
+      children[i] = inputs[i].inputs.get(0);
+    }
+    Operator<? extends OperatorDesc> unionOp = OperatorFactory.getAndMakeChild(
+            unionDesc, new RowSchema(cinfoLst), children);
+
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("Generated " + unionOp + " with row schema: [" + 
unionOp.getSchema() + "]");
+    }
+
+    // 3. Return result
+    return inputs[0].clone(unionOp);
+  }
+
   private static ExprNodeDesc[][] extractJoinKeys(JoinPredicateInfo 
joinPredInfo,
           List<RelNode> inputs) {
     ExprNodeDesc[][] joinKeys = new ExprNodeDesc[inputs.size()][];


Reply via email to