This is an automated email from the ASF dual-hosted git repository. zabetak pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
commit 4ae2dae62398f319f1daa0cea77edd88b6c8f004 Author: Stamatis Zampetakis <zabe...@gmail.com> AuthorDate: Mon Oct 17 15:24:34 2022 +0200 HIVE-26642: Replace HiveFilterMergeRule with Calcite's built-in implementation (Stamatis Zampetakis reviewed by Krisztian Kasa) Closes #3678 --- .../hadoop/hive/ql/optimizer/calcite/Bug.java | 6 --- .../calcite/rules/HiveFilterMergeRule.java | 59 ---------------------- .../hadoop/hive/ql/parse/CalcitePlanner.java | 8 ++- 3 files changed, 6 insertions(+), 67 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/Bug.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/Bug.java index dc984861e3f..32f8cff74b9 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/Bug.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/Bug.java @@ -34,12 +34,6 @@ public final class Bug { * Whether <a href="https://issues.apache.org/jira/browse/CALCITE-1851">CALCITE-1851</a> is fixed. */ public static final boolean CALCITE_1851_FIXED = false; - - /** - * Whether <a href="https://issues.apache.org/jira/browse/CALCITE-3982">issue - * CALCITE-3982</a> is fixed. - */ - public static final boolean CALCITE_3982_FIXED = false; /** * Whether <a href="https://issues.apache.org/jira/browse/CALCITE-4166">issue diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterMergeRule.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterMergeRule.java deleted file mode 100644 index 4f820af7563..00000000000 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterMergeRule.java +++ /dev/null @@ -1,59 +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.rules; - -import org.apache.calcite.plan.RelOptRule; -import org.apache.calcite.plan.RelOptRuleCall; -import org.apache.calcite.tools.RelBuilder; -import org.apache.hadoop.hive.ql.optimizer.calcite.Bug; -import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelFactories; -import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveFilter; - -/** - * Mostly a copy of {@link org.apache.calcite.rel.rules.FilterMergeRule}. - * However, it relies in relBuilder to create the new condition and thus - * simplifies/flattens the predicate before creating the new filter. - */ -public class HiveFilterMergeRule extends RelOptRule { - - public static final HiveFilterMergeRule INSTANCE = - new HiveFilterMergeRule(); - - /** Private constructor. */ - private HiveFilterMergeRule() { - super(operand(HiveFilter.class, - operand(HiveFilter.class, any())), - HiveRelFactories.HIVE_BUILDER, null); - if (Bug.CALCITE_3982_FIXED) { - throw new AssertionError("Remove logic in HiveFilterMergeRule when [CALCITE-3982] " - + "has been fixed and use directly Calcite's FilterMergeRule instead."); - } - } - - //~ Methods ---------------------------------------------------------------- - - public void onMatch(RelOptRuleCall call) { - final HiveFilter topFilter = call.rel(0); - final HiveFilter bottomFilter = call.rel(1); - - final RelBuilder relBuilder = call.builder(); - relBuilder.push(bottomFilter.getInput()) - .filter(bottomFilter.getCondition(), topFilter.getCondition()); - - call.transformTo(relBuilder.build()); - } -} 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 0683586e86c..5a6d256cb20 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 @@ -90,6 +90,8 @@ import org.apache.calcite.rel.metadata.ChainedRelMetadataProvider; import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider; import org.apache.calcite.rel.metadata.RelMetadataProvider; import org.apache.calcite.rel.metadata.RelMetadataQuery; +import org.apache.calcite.rel.rules.CoreRules; +import org.apache.calcite.rel.rules.FilterMergeRule; import org.apache.calcite.rel.rules.JoinToMultiJoinRule; import org.apache.calcite.rel.rules.LoptOptimizeJoinRule; import org.apache.calcite.rel.rules.ProjectMergeRule; @@ -217,7 +219,6 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveExpandDistinctAggre import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFieldTrimmerRule; import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterAggregateTransposeRule; import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterJoinRule; -import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterMergeRule; import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterProjectTSTransposeRule; import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterProjectTransposeRule; import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterSetOpTransposeRule; @@ -1847,7 +1848,10 @@ public class CalcitePlanner extends SemanticAnalyzer { rules.add(HiveFilterJoinRule.FILTER_ON_JOIN); rules.add(new HiveFilterAggregateTransposeRule(Filter.class, HiveRelFactories.HIVE_BUILDER, Aggregate.class)); - rules.add(HiveFilterMergeRule.INSTANCE); + rules.add(FilterMergeRule.Config.DEFAULT + .withOperandFor(HiveFilter.class) + .withRelBuilderFactory(HiveRelFactories.HIVE_BUILDER) + .toRule()); if (conf.getBoolVar(HiveConf.ConfVars.HIVE_OPTIMIZE_REDUCE_WITH_STATS)) { rules.add(HiveReduceExpressionsWithStatsRule.INSTANCE); }