HIVE-15030: Fixes in inference of collation for Tez cost model (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/f99a6e84 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/f99a6e84 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/f99a6e84 Branch: refs/heads/hive-14535 Commit: f99a6e84447874a6a2453c62c34e6756492aae12 Parents: e2653db Author: Jesus Camacho Rodriguez <[email protected]> Authored: Fri Oct 21 13:09:00 2016 +0100 Committer: Jesus Camacho Rodriguez <[email protected]> Committed: Tue Oct 25 07:16:13 2016 -0400 ---------------------------------------------------------------------- .../calcite/cost/HiveAlgorithmsUtil.java | 1 - .../calcite/cost/HiveOnTezCostModel.java | 28 +++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/f99a6e84/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveAlgorithmsUtil.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveAlgorithmsUtil.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveAlgorithmsUtil.java index 0c13ee7..4ba10e2 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveAlgorithmsUtil.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveAlgorithmsUtil.java @@ -34,7 +34,6 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelDistribution; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin.MapJoinStreamingRelation; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveRelNode; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan; import com.google.common.collect.ImmutableList; http://git-wip-us.apache.org/repos/asf/hive/blob/f99a6e84/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveOnTezCostModel.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveOnTezCostModel.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveOnTezCostModel.java index a4233b9..af5fc5e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveOnTezCostModel.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/cost/HiveOnTezCostModel.java @@ -23,6 +23,7 @@ import java.util.List; import org.apache.calcite.plan.RelOptCost; import org.apache.calcite.rel.RelCollation; import org.apache.calcite.rel.RelDistribution; +import org.apache.calcite.rel.RelDistributions; import org.apache.calcite.rel.RelDistribution.Type; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.metadata.RelMetadataQuery; @@ -290,9 +291,12 @@ public class HiveOnTezCostModel extends HiveCostModel { @Override public ImmutableList<RelCollation> getCollation(HiveJoin join) { - if (join.getStreamingSide() != MapJoinStreamingRelation.LEFT_RELATION - || join.getStreamingSide() != MapJoinStreamingRelation.RIGHT_RELATION) { - return null; + final MapJoinStreamingRelation streamingSide = join.getStreamingSide(); + if (streamingSide != MapJoinStreamingRelation.LEFT_RELATION + && streamingSide != MapJoinStreamingRelation.RIGHT_RELATION) { + // Error; default value + LOG.warn("Streaming side for map join not chosen"); + return ImmutableList.of(); } return HiveAlgorithmsUtil.getJoinCollation(join.getJoinPredicateInfo(), join.getStreamingSide()); @@ -300,9 +304,12 @@ public class HiveOnTezCostModel extends HiveCostModel { @Override public RelDistribution getDistribution(HiveJoin join) { - if (join.getStreamingSide() != MapJoinStreamingRelation.LEFT_RELATION - || join.getStreamingSide() != MapJoinStreamingRelation.RIGHT_RELATION) { - return null; + final MapJoinStreamingRelation streamingSide = join.getStreamingSide(); + if (streamingSide != MapJoinStreamingRelation.LEFT_RELATION + && streamingSide != MapJoinStreamingRelation.RIGHT_RELATION) { + // Error; default value + LOG.warn("Streaming side for map join not chosen"); + return RelDistributions.SINGLETON; } return HiveAlgorithmsUtil.getJoinDistribution(join.getJoinPredicateInfo(), join.getStreamingSide()); @@ -456,9 +463,12 @@ public class HiveOnTezCostModel extends HiveCostModel { @Override public ImmutableList<RelCollation> getCollation(HiveJoin join) { - if (join.getStreamingSide() != MapJoinStreamingRelation.LEFT_RELATION - || join.getStreamingSide() != MapJoinStreamingRelation.RIGHT_RELATION) { - return null; + final MapJoinStreamingRelation streamingSide = join.getStreamingSide(); + if (streamingSide != MapJoinStreamingRelation.LEFT_RELATION + && streamingSide != MapJoinStreamingRelation.RIGHT_RELATION) { + // Error; default value + LOG.warn("Streaming side for map join not chosen"); + return ImmutableList.of(); } return HiveAlgorithmsUtil.getJoinCollation(join.getJoinPredicateInfo(), join.getStreamingSide());
