You are viewing a plain text version of this content. The canonical link for it is here.
Posted to gitbox@hive.apache.org by GitBox <gi...@apache.org> on 2020/08/25 06:02:17 UTC

[GitHub] [hive] kasakrisz commented on a change in pull request #1405: HIVE-24041: Extend semijoin conversion rules

kasakrisz commented on a change in pull request #1405:
URL: https://github.com/apache/hive/pull/1405#discussion_r476169201



##########
File path: ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveSemiJoinRule.java
##########
@@ -33,194 +37,263 @@
 import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.tools.RelBuilder.GroupKey;
 import org.apache.calcite.tools.RelBuilderFactory;
 import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.calcite.util.ImmutableIntList;
+import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil;
 import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelFactories;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
 import java.util.List;
 
 /**
- * Planner rule that creates a {@code SemiJoinRule} from a
- * {@link org.apache.calcite.rel.core.Join} on top of a
- * {@link org.apache.calcite.rel.logical.LogicalAggregate}.
- *
- * TODO Remove this rule and use Calcite's SemiJoinRule. Not possible currently
- * since Calcite doesnt use RelBuilder for this rule and we want to generate HiveSemiJoin rel here.
+ * Class that gathers SemiJoin conversion rules.
  */
-public abstract class HiveSemiJoinRule extends RelOptRule {
+public class HiveSemiJoinRule {
 
-  protected static final Logger LOG = LoggerFactory.getLogger(HiveSemiJoinRule.class);
+  public static final HiveProjectJoinToSemiJoinRule INSTANCE_PROJECT =
+      new HiveProjectJoinToSemiJoinRule(HiveRelFactories.HIVE_BUILDER);
 
-  public static final HiveProjectToSemiJoinRule INSTANCE_PROJECT =
-      new HiveProjectToSemiJoinRule(HiveRelFactories.HIVE_BUILDER);
+  public static final HiveAggregateJoinToSemiJoinRule INSTANCE_AGGREGATE =
+      new HiveAggregateJoinToSemiJoinRule(HiveRelFactories.HIVE_BUILDER);
 
-  public static final HiveProjectToSemiJoinRuleSwapInputs INSTANCE_PROJECT_SWAPPED =
-      new HiveProjectToSemiJoinRuleSwapInputs(HiveRelFactories.HIVE_BUILDER);
+  public static final HiveProjectJoinToSemiJoinRuleSwapInputs INSTANCE_PROJECT_SWAPPED =
+      new HiveProjectJoinToSemiJoinRuleSwapInputs(HiveRelFactories.HIVE_BUILDER);
 
-  public static final HiveAggregateToSemiJoinRule INSTANCE_AGGREGATE =
-      new HiveAggregateToSemiJoinRule(HiveRelFactories.HIVE_BUILDER);
+  public static final HiveAggregateJoinToSemiJoinRuleSwapInputs INSTANCE_AGGREGATE_SWAPPED =
+      new HiveAggregateJoinToSemiJoinRuleSwapInputs(HiveRelFactories.HIVE_BUILDER);

Review comment:
       nit.: Is the parameter value always `HiveRelFactories.HIVE_BUILDER` ? It can be moved to the base class as a constant.

##########
File path: ql/src/test/queries/clientpositive/auto_sortmerge_join_10.q
##########
@@ -48,6 +48,8 @@ select count(*) from
   (select a.key as key, a.value as value from tbl2_n4 a where key < 6) subq2
   on subq1.key = subq2.key;
 
+set hive.auto.convert.sortmerge.join=false;

Review comment:
       Based on the test filename this test intend to test automatic conversion to a sort-merge join but it is not tested anymore if the feature is turned off.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscribe@hive.apache.org
For additional commands, e-mail: gitbox-help@hive.apache.org