You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by za...@apache.org on 2022/10/19 11:53:06 UTC
[hive] 02/03: HIVE-26642: Replace HiveFilterMergeRule with Calcite's built-in implementation (Stamatis Zampetakis reviewed by Krisztian Kasa)
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 <za...@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);
}