diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdCollation.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdCollation.java index f29a91c..4984683 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdCollation.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdCollation.java @@ -12,6 +12,7 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil.JoinLeafPredicateInfo; import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil.JoinPredicateInfo; import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelCollation; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveAggregate; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin.MapJoinStreamingRelation; @@ -32,6 +33,20 @@ private HiveRelMdCollation() {} //~ Methods ---------------------------------------------------------------- + public ImmutableList collations(HiveAggregate aggregate) { + // Compute collations + ImmutableList.Builder collationListBuilder = + new ImmutableList.Builder(); + for (int pos : aggregate.getGroupSet().asList()) { + final RelFieldCollation fieldCollation = new RelFieldCollation(pos); + collationListBuilder.add(fieldCollation); + } + // Return aggregate collations + return ImmutableList.of( + RelCollationTraitDef.INSTANCE.canonize( + new HiveRelCollation(collationListBuilder.build()))); + } + public ImmutableList collations(HiveJoin join) { // Compute collations ImmutableList.Builder collationListBuilder = diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistribution.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistribution.java index 986e628..f846dd1 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistribution.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdDistribution.java @@ -10,6 +10,7 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil.JoinLeafPredicateInfo; import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil.JoinPredicateInfo; import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelDistribution; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveAggregate; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin.MapJoinStreamingRelation; @@ -30,6 +31,11 @@ private HiveRelMdDistribution() {} //~ Methods ---------------------------------------------------------------- + public RelDistribution distribution(HiveAggregate aggregate) { + return new HiveRelDistribution(RelDistribution.Type.HASH_DISTRIBUTED, + aggregate.getGroupSet().asList()); + } + public RelDistribution distribution(HiveJoin join) { // Compute distribution ImmutableList.Builder keysListBuilder =