Repository: hive Updated Branches: refs/heads/master 753fed62d -> b1fffd5a8
HIVE-11781 : Remove HiveLimit operator (Jesus Camacho Rodriguez via Ashutosh Chauhan) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/b1fffd5a Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/b1fffd5a Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/b1fffd5a Branch: refs/heads/master Commit: b1fffd5a8a8aa10f19c03f79cf02d8147222ccc8 Parents: 753fed6 Author: Jesus Camacho Rodriguez <jcama...@apache.org> Authored: Thu Sep 10 02:46:00 2015 -0800 Committer: Ashutosh Chauhan <hashut...@apache.org> Committed: Fri Sep 11 17:12:21 2015 -0700 ---------------------------------------------------------------------- .../calcite/reloperators/HiveLimit.java | 57 ---------- .../calcite/reloperators/HiveSort.java | 110 ------------------- .../calcite/reloperators/HiveSortLimit.java | 110 +++++++++++++++++++ .../calcite/stats/HiveRelMdMemory.java | 9 +- .../calcite/stats/HiveRelMdParallelism.java | 4 +- .../calcite/translator/ASTConverter.java | 24 ++-- .../calcite/translator/HiveOpConverter.java | 8 +- .../translator/PlanModifierForASTConv.java | 10 +- .../calcite/translator/PlanModifierUtil.java | 4 +- .../hadoop/hive/ql/parse/CalcitePlanner.java | 10 +- 10 files changed, 142 insertions(+), 204 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveLimit.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveLimit.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveLimit.java deleted file mode 100644 index 74991d6..0000000 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveLimit.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hive.ql.optimizer.calcite.reloperators; - -import java.util.List; - -import org.apache.calcite.plan.RelOptCluster; -import org.apache.calcite.plan.RelOptCost; -import org.apache.calcite.plan.RelOptPlanner; -import org.apache.calcite.plan.RelTraitSet; -import org.apache.calcite.rel.RelNode; -import org.apache.calcite.rel.SingleRel; -import org.apache.calcite.rel.metadata.RelMetadataQuery; -import org.apache.calcite.rex.RexNode; -import org.apache.hadoop.hive.ql.optimizer.calcite.TraitsUtil; - -public class HiveLimit extends SingleRel implements HiveRelNode { - private final RexNode offset; - private final RexNode fetch; - - HiveLimit(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, RexNode offset, - RexNode fetch) { - super(cluster, TraitsUtil.getDefaultTraitSet(cluster), child); - this.offset = offset; - this.fetch = fetch; - assert getConvention() instanceof HiveRelNode; - assert getConvention() == child.getConvention(); - } - - @Override - public HiveLimit copy(RelTraitSet traitSet, List<RelNode> newInputs) { - return new HiveLimit(getCluster(), traitSet, sole(newInputs), offset, fetch); - } - - public void implement(Implementor implementor) { - } - - @Override - public RelOptCost computeSelfCost(RelOptPlanner planner) { - return RelMetadataQuery.getNonCumulativeCost(this); - } -} http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSort.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSort.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSort.java deleted file mode 100644 index 1df6542..0000000 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSort.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hive.ql.optimizer.calcite.reloperators; - -import java.util.Map; - -import org.apache.calcite.plan.RelOptCluster; -import org.apache.calcite.plan.RelTraitSet; -import org.apache.calcite.rel.RelCollation; -import org.apache.calcite.rel.RelCollationTraitDef; -import org.apache.calcite.rel.RelNode; -import org.apache.calcite.rel.core.RelFactories; -import org.apache.calcite.rel.core.Sort; -import org.apache.calcite.rex.RexNode; -import org.apache.hadoop.hive.ql.optimizer.calcite.TraitsUtil; - -import com.google.common.collect.ImmutableMap; - -public class HiveSort extends Sort implements HiveRelNode { - - public static final HiveSortRelFactory HIVE_SORT_REL_FACTORY = new HiveSortRelFactory(); - - // NOTE: this is to work around Hive Calcite Limitations w.r.t OB. - // 1. Calcite can not accept expressions in OB; instead it needs to be expressed - // as VC in input Select. - // 2. Hive can not preserve ordering through select boundaries. - // 3. This map is used for outermost OB to migrate the VC corresponding OB - // expressions from input select. - // 4. This is used by ASTConverter after we are done with Calcite Planning - private ImmutableMap<Integer, RexNode> mapOfInputRefToRexCall; - - public HiveSort(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, - RelCollation collation, RexNode offset, RexNode fetch) { - super(cluster, TraitsUtil.getSortTraitSet(cluster, traitSet, collation), child, collation, - offset, fetch); - } - - /** - * Creates a HiveSort. - * - * @param input Input relational expression - * @param collation array of sort specifications - * @param offset Expression for number of rows to discard before returning - * first row - * @param fetch Expression for number of rows to fetch - */ - public static HiveSort create(RelNode input, RelCollation collation, - RexNode offset, RexNode fetch) { - RelOptCluster cluster = input.getCluster(); - collation = RelCollationTraitDef.INSTANCE.canonize(collation); - RelTraitSet traitSet = - TraitsUtil.getSortTraitSet(cluster, input.getTraitSet(), collation); - return new HiveSort(cluster, traitSet, input, collation, offset, fetch); - } - - @Override - public HiveSort copy(RelTraitSet traitSet, RelNode newInput, RelCollation newCollation, - RexNode offset, RexNode fetch) { - // TODO: can we blindly copy sort trait? What if inputs changed and we - // are now sorting by different cols - RelCollation canonizedCollation = traitSet.canonize(newCollation); - return new HiveSort(getCluster(), traitSet, newInput, canonizedCollation, offset, fetch); - } - - public RexNode getFetchExpr() { - return fetch; - } - - public void setInputRefToCallMap(ImmutableMap<Integer, RexNode> refToCall) { - this.mapOfInputRefToRexCall = refToCall; - } - - public Map<Integer, RexNode> getInputRefToCallMap() { - return this.mapOfInputRefToRexCall; - } - - @Override - public void implement(Implementor implementor) { - } - - private static class HiveSortRelFactory implements RelFactories.SortFactory { - - @Override - public RelNode createSort(RelTraitSet traits, RelNode input, RelCollation collation, - RexNode offset, RexNode fetch) { - return createSort(input, collation, offset, fetch); - } - - @Override - public RelNode createSort(RelNode input, RelCollation collation, RexNode offset, - RexNode fetch) { - return create(input, collation, offset, fetch); - } - } -} http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSortLimit.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSortLimit.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSortLimit.java new file mode 100644 index 0000000..82fdc0e --- /dev/null +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSortLimit.java @@ -0,0 +1,110 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hive.ql.optimizer.calcite.reloperators; + +import java.util.Map; + +import org.apache.calcite.plan.RelOptCluster; +import org.apache.calcite.plan.RelTraitSet; +import org.apache.calcite.rel.RelCollation; +import org.apache.calcite.rel.RelCollationTraitDef; +import org.apache.calcite.rel.RelNode; +import org.apache.calcite.rel.core.RelFactories; +import org.apache.calcite.rel.core.Sort; +import org.apache.calcite.rex.RexNode; +import org.apache.hadoop.hive.ql.optimizer.calcite.TraitsUtil; + +import com.google.common.collect.ImmutableMap; + +public class HiveSortLimit extends Sort implements HiveRelNode { + + public static final HiveSortRelFactory HIVE_SORT_REL_FACTORY = new HiveSortRelFactory(); + + // NOTE: this is to work around Hive Calcite Limitations w.r.t OB. + // 1. Calcite can not accept expressions in OB; instead it needs to be expressed + // as VC in input Select. + // 2. Hive can not preserve ordering through select boundaries. + // 3. This map is used for outermost OB to migrate the VC corresponding OB + // expressions from input select. + // 4. This is used by ASTConverter after we are done with Calcite Planning + private ImmutableMap<Integer, RexNode> mapOfInputRefToRexCall; + + public HiveSortLimit(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, + RelCollation collation, RexNode offset, RexNode fetch) { + super(cluster, TraitsUtil.getSortTraitSet(cluster, traitSet, collation), child, collation, + offset, fetch); + } + + /** + * Creates a HiveSortLimit. + * + * @param input Input relational expression + * @param collation array of sort specifications + * @param offset Expression for number of rows to discard before returning + * first row + * @param fetch Expression for number of rows to fetch + */ + public static HiveSortLimit create(RelNode input, RelCollation collation, + RexNode offset, RexNode fetch) { + RelOptCluster cluster = input.getCluster(); + collation = RelCollationTraitDef.INSTANCE.canonize(collation); + RelTraitSet traitSet = + TraitsUtil.getSortTraitSet(cluster, input.getTraitSet(), collation); + return new HiveSortLimit(cluster, traitSet, input, collation, offset, fetch); + } + + @Override + public HiveSortLimit copy(RelTraitSet traitSet, RelNode newInput, RelCollation newCollation, + RexNode offset, RexNode fetch) { + // TODO: can we blindly copy sort trait? What if inputs changed and we + // are now sorting by different cols + RelCollation canonizedCollation = traitSet.canonize(newCollation); + return new HiveSortLimit(getCluster(), traitSet, newInput, canonizedCollation, offset, fetch); + } + + public RexNode getFetchExpr() { + return fetch; + } + + public void setInputRefToCallMap(ImmutableMap<Integer, RexNode> refToCall) { + this.mapOfInputRefToRexCall = refToCall; + } + + public Map<Integer, RexNode> getInputRefToCallMap() { + return this.mapOfInputRefToRexCall; + } + + @Override + public void implement(Implementor implementor) { + } + + private static class HiveSortRelFactory implements RelFactories.SortFactory { + + @Override + public RelNode createSort(RelTraitSet traits, RelNode input, RelCollation collation, + RexNode offset, RexNode fetch) { + return createSort(input, collation, offset, fetch); + } + + @Override + public RelNode createSort(RelNode input, RelCollation collation, RexNode offset, + RexNode fetch) { + return create(input, collation, offset, fetch); + } + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdMemory.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdMemory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdMemory.java index 1a2e6d1..bea5943 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdMemory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdMemory.java @@ -26,9 +26,8 @@ import org.apache.calcite.util.BuiltInMethod; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveAggregate; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveFilter; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveLimit; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveProject; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSort; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortLimit; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveUnion; @@ -73,15 +72,11 @@ public class HiveRelMdMemory extends RelMdMemory { return join.getCumulativeMemoryWithinPhaseSplit(); } - public Double memory(HiveLimit limit) { - return 0.0; - } - public Double memory(HiveProject project) { return 0.0; } - public Double memory(HiveSort sort) { + public Double memory(HiveSortLimit sort) { if (sort.getCollation() != RelCollations.EMPTY) { // It sorts final Double avgRowSize = RelMetadataQuery.getAverageRowSize(sort.getInput()); http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdParallelism.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdParallelism.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdParallelism.java index c7afea9..2f51d3b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdParallelism.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdParallelism.java @@ -27,7 +27,7 @@ import org.apache.calcite.rel.metadata.RelMetadataQuery; import org.apache.calcite.util.BuiltInMethod; import org.apache.hadoop.hive.ql.optimizer.calcite.RelOptHiveTable; 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.HiveSortLimit; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan; public class HiveRelMdParallelism extends RelMdParallelism { @@ -52,7 +52,7 @@ public class HiveRelMdParallelism extends RelMdParallelism { return join.isPhaseTransition(); } - public Boolean isPhaseTransition(HiveSort sort) { + public Boolean isPhaseTransition(HiveSortLimit sort) { // As Exchange operator is introduced later on, we make a // sort operator create a new stage for the moment return true; http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java index b6995c9..14946b3 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java @@ -58,7 +58,7 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.ql.metadata.VirtualColumn; import org.apache.hadoop.hive.ql.optimizer.calcite.CalciteSemanticException; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveGroupingID; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSort; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortLimit; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan; import org.apache.hadoop.hive.ql.optimizer.calcite.translator.SqlFunctionConverter.HiveToken; import org.apache.hadoop.hive.ql.parse.ASTNode; @@ -204,17 +204,17 @@ public class ASTConverter { * to its src/from. Hence the need to pass in sort for each block from * its parent. */ - convertOBToASTNode((HiveSort) order); + convertOBToASTNode((HiveSortLimit) order); // 8. Limit - convertLimitToASTNode((HiveSort) limit); + convertLimitToASTNode((HiveSortLimit) limit); return hiveAST.getAST(); } - private void convertLimitToASTNode(HiveSort limit) { + private void convertLimitToASTNode(HiveSortLimit limit) { if (limit != null) { - HiveSort hiveLimit = limit; + HiveSortLimit hiveLimit = limit; RexNode limitExpr = hiveLimit.getFetchExpr(); if (limitExpr != null) { Object val = ((RexLiteral) limitExpr).getValue2(); @@ -223,18 +223,18 @@ public class ASTConverter { } } - private void convertOBToASTNode(HiveSort order) { + private void convertOBToASTNode(HiveSortLimit order) { if (order != null) { - HiveSort hiveSort = order; - if (!hiveSort.getCollation().getFieldCollations().isEmpty()) { + HiveSortLimit hiveSortLimit = order; + if (!hiveSortLimit.getCollation().getFieldCollations().isEmpty()) { // 1 Add order by token ASTNode orderAst = ASTBuilder.createAST(HiveParser.TOK_ORDERBY, "TOK_ORDERBY"); - schema = new Schema(hiveSort); - Map<Integer, RexNode> obRefToCallMap = hiveSort.getInputRefToCallMap(); + schema = new Schema(hiveSortLimit); + Map<Integer, RexNode> obRefToCallMap = hiveSortLimit.getInputRefToCallMap(); RexNode obExpr; ASTNode astCol; - for (RelFieldCollation c : hiveSort.getCollation().getFieldCollations()) { + for (RelFieldCollation c : hiveSortLimit.getCollation().getFieldCollations()) { // 2 Add Direction token ASTNode directionAST = c.getDirection() == RelFieldCollation.Direction.ASCENDING ? ASTBuilder @@ -651,7 +651,7 @@ public class ASTConverter { * Hive Sort Node * @return Schema */ - public Schema(HiveSort order) { + public Schema(HiveSortLimit order) { Project select = (Project) order.getInput(); for (String projName : select.getRowType().getFieldNames()) { add(new ColumnInfo(null, projName)); http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java index 3f66893..f6c0114 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java @@ -64,7 +64,7 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveMultiJoin; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveProject; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSemiJoin; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSort; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortLimit; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortExchange; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveUnion; @@ -171,8 +171,8 @@ public class HiveOpConverter { return visit(hj); } else if (rn instanceof HiveFilter) { return visit((HiveFilter) rn); - } else if (rn instanceof HiveSort) { - return visit((HiveSort) rn); + } else if (rn instanceof HiveSortLimit) { + return visit((HiveSortLimit) rn); } else if (rn instanceof HiveUnion) { return visit((HiveUnion) rn); } else if (rn instanceof HiveSortExchange) { @@ -398,7 +398,7 @@ public class HiveOpConverter { return HiveGBOpConvUtil.translateGB(inputOpAf, aggRel, hiveConf); } - OpAttr visit(HiveSort sortRel) throws SemanticException { + OpAttr visit(HiveSortLimit sortRel) throws SemanticException { OpAttr inputOpAf = dispatch(sortRel.getInput()); if (LOG.isDebugEnabled()) { http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierForASTConv.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierForASTConv.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierForASTConv.java index 5cd3a06..67f17c2 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierForASTConv.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierForASTConv.java @@ -45,7 +45,7 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.CalciteSemanticException; import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveAggregate; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveProject; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSort; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortLimit; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; @@ -141,12 +141,12 @@ public class PlanModifierForASTConv { if (!validFilterParent(rel, parent)) { introduceDerivedTable(rel, parent); } - } else if (rel instanceof HiveSort) { + } else if (rel instanceof HiveSortLimit) { if (!validSortParent(rel, parent)) { introduceDerivedTable(rel, parent); } - if (!validSortChild((HiveSort) rel)) { - introduceDerivedTable(((HiveSort) rel).getInput(), rel); + if (!validSortChild((HiveSortLimit) rel)) { + introduceDerivedTable(((HiveSortLimit) rel).getInput(), rel); } } else if (rel instanceof HiveAggregate) { RelNode newParent = parent; @@ -297,7 +297,7 @@ public class PlanModifierForASTConv { return validParent; } - private static boolean validSortChild(HiveSort sortNode) { + private static boolean validSortChild(HiveSortLimit sortNode) { boolean validChild = true; RelNode child = sortNode.getInput(); http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierUtil.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierUtil.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierUtil.java index 3e2fae9..988d6d3 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierUtil.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierUtil.java @@ -37,7 +37,7 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.ql.optimizer.calcite.CalciteSemanticException; import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveProject; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSort; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortLimit; import com.google.common.collect.ImmutableMap; @@ -53,7 +53,7 @@ public class PlanModifierUtil { || !HiveCalciteUtil.orderRelNode(topSelparentPair.getKey())) { return; } - HiveSort obRel = (HiveSort) topSelparentPair.getKey(); + HiveSortLimit obRel = (HiveSortLimit) topSelparentPair.getKey(); Project obChild = (Project) topSelparentPair.getValue(); if (obChild.getRowType().getFieldCount() <= resultSchema.size()) { return; http://git-wip-us.apache.org/repos/asf/hive/blob/b1fffd5a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index 73ae7c4..86bdf7e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -131,7 +131,7 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveProject; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveRelNode; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSemiJoin; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSort; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortLimit; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveUnion; import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveExpandDistinctAggregatesRule; @@ -922,7 +922,7 @@ public class CalcitePlanner extends SemanticAnalyzer { // thus we run the field trimmer again to push them back down HiveRelFieldTrimmer fieldTrimmer = new HiveRelFieldTrimmer(null, HiveProject.DEFAULT_PROJECT_FACTORY, HiveFilter.DEFAULT_FILTER_FACTORY, HiveJoin.HIVE_JOIN_FACTORY, - HiveSemiJoin.HIVE_SEMIJOIN_FACTORY, HiveSort.HIVE_SORT_REL_FACTORY, + HiveSemiJoin.HIVE_SEMIJOIN_FACTORY, HiveSortLimit.HIVE_SORT_REL_FACTORY, HiveAggregate.HIVE_AGGR_REL_FACTORY, HiveUnion.UNION_REL_FACTORY); calciteOptimizedPlan = fieldTrimmer.trim(calciteOptimizedPlan); calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, mdProvider.getMetadataProvider(), @@ -1003,7 +1003,7 @@ public class CalcitePlanner extends SemanticAnalyzer { // 5. Projection Pruning HiveRelFieldTrimmer fieldTrimmer = new HiveRelFieldTrimmer(null, HiveProject.DEFAULT_PROJECT_FACTORY, HiveFilter.DEFAULT_FILTER_FACTORY, HiveJoin.HIVE_JOIN_FACTORY, - HiveSemiJoin.HIVE_SEMIJOIN_FACTORY, HiveSort.HIVE_SORT_REL_FACTORY, + HiveSemiJoin.HIVE_SEMIJOIN_FACTORY, HiveSortLimit.HIVE_SORT_REL_FACTORY, HiveAggregate.HIVE_AGGR_REL_FACTORY, HiveUnion.UNION_REL_FACTORY); basePlan = fieldTrimmer.trim(basePlan); @@ -2266,7 +2266,7 @@ public class CalcitePlanner extends SemanticAnalyzer { // 4. Construct SortRel RelTraitSet traitSet = cluster.traitSetOf(HiveRelNode.CONVENTION); RelCollation canonizedCollation = traitSet.canonize(RelCollationImpl.of(fieldCollations)); - sortRel = new HiveSort(cluster, traitSet, obInputRel, canonizedCollation, null, null); + sortRel = new HiveSortLimit(cluster, traitSet, obInputRel, canonizedCollation, null, null); // 5. Update the maps // NOTE: Output RR for SortRel is considered same as its input; we may @@ -2292,7 +2292,7 @@ public class CalcitePlanner extends SemanticAnalyzer { RexNode fetch = cluster.getRexBuilder().makeExactLiteral(BigDecimal.valueOf(limit)); RelTraitSet traitSet = cluster.traitSetOf(HiveRelNode.CONVENTION); RelCollation canonizedCollation = traitSet.canonize(RelCollations.EMPTY); - sortRel = new HiveSort(cluster, traitSet, srcRel, canonizedCollation, null, fetch); + sortRel = new HiveSortLimit(cluster, traitSet, srcRel, canonizedCollation, null, fetch); RowResolver outputRR = new RowResolver(); if (!RowResolver.add(outputRR, relToHiveRR.get(srcRel))) {