You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/01/03 03:35:35 UTC

[doris] branch master updated: [refactor] remove partition pruner v1 (#15552)

This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 02d035466b [refactor] remove partition pruner v1 (#15552)
02d035466b is described below

commit 02d035466b39fd08e03542b491f1be16b156ec68
Author: Mingyu Chen <mo...@163.com>
AuthorDate: Tue Jan 3 11:35:30 2023 +0800

    [refactor] remove partition pruner v1 (#15552)
    
    partition pruner v1 is no longer used.
    Also remove session variable partition_prune_algorithm_version
---
 .../java/org/apache/doris/analysis/Analyzer.java   |   9 -
 .../java/org/apache/doris/analysis/SetVar.java     |   9 -
 .../planner/BackendPartitionedSchemaScanNode.java  |  11 +-
 .../java/org/apache/doris/planner/EsScanNode.java  |   4 +-
 .../apache/doris/planner/ListPartitionPruner.java  | 252 ---------------------
 .../org/apache/doris/planner/OlapScanNode.java     |  18 +-
 .../apache/doris/planner/RangePartitionPruner.java | 194 ----------------
 .../java/org/apache/doris/planner/ScanNode.java    |  18 +-
 .../apache/doris/planner/StreamLoadPlanner.java    |  19 +-
 .../java/org/apache/doris/qe/SessionVariable.java  |   9 -
 .../doris/analysis/ListPartitionPrunerTest.java    |  56 ++---
 .../doris/analysis/PartitionPruneTestBase.java     |  21 +-
 .../doris/analysis/RangePartitionPruneTest.java    |  95 ++++----
 13 files changed, 111 insertions(+), 604 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
index 6dac70dbe9..b3e21d6c38 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
@@ -2129,15 +2129,6 @@ public class Analyzer {
         return globalState.context.getSessionVariable().isEnableInferPredicate();
     }
 
-    // Use V2 version as default implementation.
-    public boolean partitionPruneV2Enabled() {
-        if (globalState.context == null) {
-            return true;
-        } else {
-            return globalState.context.getSessionVariable().getPartitionPruneAlgorithmVersion() == 2;
-        }
-    }
-
     // The cost based join reorder is turned on
     // when 'enable_join_reorder_based_cost = true' and 'disable_join_reorder = false'
     // Load plan and query plan are the same framework
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SetVar.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SetVar.java
index b49423b002..9b80734bc0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SetVar.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SetVar.java
@@ -150,15 +150,6 @@ public class SetVar {
         if (getVariable().equalsIgnoreCase("is_report_success")) {
             variable = SessionVariable.ENABLE_PROFILE;
         }
-
-        if (getVariable().equalsIgnoreCase(SessionVariable.PARTITION_PRUNE_ALGORITHM_VERSION)) {
-            String value = getValue().getStringValue();
-            if (!"1".equals(value) && !"2".equals(value)) {
-                throw new AnalysisException("Value of "
-                        + SessionVariable.PARTITION_PRUNE_ALGORITHM_VERSION + " should be "
-                        + "either 1 or 2, but meet " + value);
-            }
-        }
     }
 
     public String toSql() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/BackendPartitionedSchemaScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/BackendPartitionedSchemaScanNode.java
index 5bc7417f28..8889373af3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/BackendPartitionedSchemaScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/BackendPartitionedSchemaScanNode.java
@@ -127,15 +127,10 @@ public class BackendPartitionedSchemaScanNode extends SchemaScanNode {
             }
         }
         createPartitionInfo(partitionColumns);
-        PartitionPruner partitionPruner = null;
         Map<Long, PartitionItem> keyItemMap = backendPartitionInfo.getIdToItem(false);
-        if (analyzer.partitionPruneV2Enabled()) {
-            partitionPruner = new ListPartitionPrunerV2(keyItemMap, backendPartitionInfo.getPartitionColumns(),
-                    columnNameToRange);
-        } else {
-            partitionPruner = new ListPartitionPruner(keyItemMap,
-                    backendPartitionInfo.getPartitionColumns(), columnFilters);
-        }
+        PartitionPruner partitionPruner = new ListPartitionPrunerV2(keyItemMap,
+                backendPartitionInfo.getPartitionColumns(),
+                columnNameToRange);
         selectedPartitionIds = partitionPruner.prune();
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/EsScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/EsScanNode.java
index 157c85047b..a57ee755f3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/EsScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/EsScanNode.java
@@ -316,8 +316,8 @@ public class EsScanNode extends ScanNode {
             case RANGE: {
                 RangePartitionInfo rangePartitionInfo = (RangePartitionInfo) partitionInfo;
                 Map<Long, PartitionItem> keyRangeById = rangePartitionInfo.getIdToItem(false);
-                partitionPruner = new RangePartitionPruner(keyRangeById, rangePartitionInfo.getPartitionColumns(),
-                        columnFilters);
+                partitionPruner = new RangePartitionPrunerV2(keyRangeById, rangePartitionInfo.getPartitionColumns(),
+                        columnNameToRange);
                 return partitionPruner.prune();
             }
             case UNPARTITIONED: {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ListPartitionPruner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/ListPartitionPruner.java
deleted file mode 100644
index 64b7650045..0000000000
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/ListPartitionPruner.java
+++ /dev/null
@@ -1,252 +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.doris.planner;
-
-import org.apache.doris.analysis.InPredicate;
-import org.apache.doris.analysis.LiteralExpr;
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.PartitionItem;
-import org.apache.doris.catalog.PartitionKey;
-import org.apache.doris.catalog.Type;
-import org.apache.doris.common.AnalysisException;
-
-import com.google.common.collect.BoundType;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Range;
-import com.google.common.collect.Sets;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * list partition pruner
- */
-public class ListPartitionPruner implements PartitionPruner {
-
-    private Map<Long, PartitionItem> partitionListMap;
-    private List<Column>                       partitionColumns;
-    private Map<String, PartitionColumnFilter> partitionColumnFilters;
-
-    public ListPartitionPruner(Map<Long, PartitionItem> listMap,
-                               List<Column> columns,
-                               Map<String, PartitionColumnFilter> filters) {
-        partitionListMap = listMap;
-        partitionColumns = columns;
-        partitionColumnFilters = filters;
-    }
-
-    private Collection<Long> pruneListMap(Map<Long, PartitionItem> listMap,
-                                          Range<PartitionKey> range,
-                                          int columnId) {
-        Set<Long> resultSet = Sets.newHashSet();
-        for (Map.Entry<Long, PartitionItem> entry : listMap.entrySet()) {
-            List<PartitionKey> partitionKeys = entry.getValue().getItems();
-            for (PartitionKey partitionKey : partitionKeys) {
-                LiteralExpr expr = partitionKey.getKeys().get(columnId);
-                if (contain(range, expr, columnId)) {
-                    resultSet.add(entry.getKey());
-                }
-            }
-        }
-        return resultSet;
-    }
-
-    /**
-     * check literal expr exist in partition range
-     * @param range the partition key range
-     * @param literalExpr expr to be checked
-     * @param columnId expr column index in partition key
-     * @return
-     */
-    private boolean contain(Range<PartitionKey> range, LiteralExpr literalExpr, int columnId) {
-        LiteralExpr lowerExpr = range.lowerEndpoint().getKeys().get(columnId);
-        LiteralExpr upperExpr = range.upperEndpoint().getKeys().get(columnId);
-        BoundType lType = range.lowerBoundType();
-        BoundType uType = range.upperBoundType();
-        int ret1 = PartitionKey.compareLiteralExpr(literalExpr, lowerExpr);
-        int ret2 = PartitionKey.compareLiteralExpr(literalExpr, upperExpr);
-
-        if (lType == BoundType.CLOSED && uType == BoundType.CLOSED) {
-            if (ret1 >= 0 && ret2 <= 0) {
-                return true;
-            }
-        } else if (lType == BoundType.CLOSED && uType == BoundType.OPEN) {
-            if (ret1 >= 0 && ret2 < 0) {
-                return true;
-            }
-        } else if (lType == BoundType.OPEN && uType == BoundType.CLOSED) {
-            if (ret1 > 0 && ret2 <= 0) {
-                return true;
-            }
-        } else if (lType == BoundType.OPEN && uType == BoundType.OPEN) {
-            if (ret1 > 0 && ret2 < 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * get min literal expr from partition key list map by partition key column id.
-     * @param columnId
-     * @return
-     */
-    private LiteralExpr getMinLiteral(int columnId) {
-        LiteralExpr minLiteral = null;
-        for (Map.Entry<Long, PartitionItem> entry : partitionListMap.entrySet()) {
-            List<PartitionKey> partitionKeys = entry.getValue().getItems();
-            for (PartitionKey partitionKey : partitionKeys) {
-                minLiteral = getMinExpr(partitionKey.getKeys().get(columnId), minLiteral);
-            }
-        }
-        return minLiteral;
-    }
-
-    private LiteralExpr getMinExpr(LiteralExpr expr, LiteralExpr minLiteral) {
-        if (minLiteral == null) {
-            minLiteral = expr;
-            return minLiteral;
-        }
-        if (expr.compareLiteral(minLiteral) < 0) {
-            minLiteral = expr;
-        }
-        return minLiteral;
-    }
-
-    private Collection<Long> prune(
-            Map<Long, PartitionItem> listMap,
-            int columnId,
-            PartitionKey minKey,
-            PartitionKey maxKey,
-            int complex)
-            throws AnalysisException {
-        // if partition item map is empty, no need to prune.
-        if (listMap.size() == 0) {
-            return Lists.newArrayList();
-        }
-
-        if (columnId == partitionColumns.size()) {
-            try {
-                return pruneListMap(listMap, Range.closed(minKey, maxKey), columnId - 1);
-            } catch (IllegalArgumentException e) {
-                return Lists.newArrayList();
-            }
-        }
-        Column keyColumn = partitionColumns.get(columnId);
-        PartitionColumnFilter filter = partitionColumnFilters.get(keyColumn.getName());
-        // no filter in this column
-        if (null == filter) {
-            minKey.pushColumn(getMinLiteral(columnId), keyColumn.getDataType());
-            maxKey.pushColumn(LiteralExpr.createInfinity(Type.fromPrimitiveType(keyColumn.getDataType()), true),
-                                keyColumn.getDataType());
-            Collection<Long> result = null;
-            try {
-                // prune next partition column
-                result = prune(listMap, columnId + 1, minKey, maxKey, complex);
-            } catch (IllegalArgumentException e) {
-                result = Lists.newArrayList();
-            }
-            minKey.popColumn();
-            maxKey.popColumn();
-            return result;
-        }
-        InPredicate inPredicate = filter.getInPredicate();
-        if (null == inPredicate || inPredicate.getChildren().size() * complex > 100) {
-            // case: where k1 = 1;
-            if (filter.lowerBoundInclusive && filter.upperBoundInclusive
-                    && filter.lowerBound != null && filter.upperBound != null
-                    && 0 == filter.lowerBound.compareLiteral(filter.upperBound)) {
-                minKey.pushColumn(filter.lowerBound, keyColumn.getDataType());
-                maxKey.pushColumn(filter.upperBound, keyColumn.getDataType());
-                // handle like in predicate
-                Collection<Long> result = pruneListMap(listMap, Range.closed(minKey, maxKey), columnId);
-                // prune next partition column
-                if (partitionColumns.size() > 1) {
-                    result.retainAll(prune(listMap, columnId + 1, minKey, maxKey, complex));
-                }
-                minKey.popColumn();
-                maxKey.popColumn();
-                return result;
-            }
-            // no in predicate
-            BoundType lowerType = filter.lowerBoundInclusive ? BoundType.CLOSED : BoundType.OPEN;
-            BoundType upperType = filter.upperBoundInclusive ? BoundType.CLOSED : BoundType.OPEN;
-            boolean isPushMin = false;
-            boolean isPushMax = false;
-            if (filter.lowerBound != null) {
-                minKey.pushColumn(filter.lowerBound, keyColumn.getDataType());
-            } else {
-                minKey.pushColumn(getMinLiteral(columnId),
-                        keyColumn.getDataType());
-                isPushMin = true;
-            }
-            if (filter.upperBound != null) {
-                maxKey.pushColumn(filter.upperBound, keyColumn.getDataType());
-            } else {
-                maxKey.pushColumn(LiteralExpr.createInfinity(Type.fromPrimitiveType(keyColumn.getDataType()), true),
-                        keyColumn.getDataType());
-                isPushMax = true;
-            }
-
-            Collection<Long> result = null;
-            try {
-                result = pruneListMap(listMap, Range.range(minKey, lowerType, maxKey, upperType), columnId);
-                // prune next partition column
-                if (partitionColumns.size() > 1) {
-                    result.retainAll(prune(listMap, columnId + 1, minKey, maxKey, complex));
-                }
-                return result;
-            } catch (IllegalArgumentException e) {
-                result = Lists.newArrayList();
-            }
-            if (isPushMin) {
-                minKey.popColumn();
-            }
-            if (isPushMax) {
-                maxKey.popColumn();
-            }
-            return result;
-        }
-        Set<Long> resultSet = Sets.newHashSet();
-        int childrenNum = inPredicate.getChildren().size();
-        complex = inPredicate.getChildren().size() * complex;
-        for (int i = 1; i < childrenNum; ++i) {
-            LiteralExpr expr = (LiteralExpr) inPredicate.getChild(i);
-            minKey.pushColumn(expr, keyColumn.getDataType());
-            maxKey.pushColumn(expr, keyColumn.getDataType());
-            Collection<Long> result = pruneListMap(listMap, Range.closed(minKey, maxKey), columnId);
-            // prune next partition column
-            if (partitionColumns.size() > 1) {
-                // Take the intersection
-                result.retainAll(prune(listMap, columnId + 1, minKey, maxKey, complex));
-            }
-            resultSet.addAll(result);
-            minKey.popColumn();
-            maxKey.popColumn();
-        }
-        return resultSet;
-    }
-
-    public Collection<Long> prune() throws AnalysisException {
-        PartitionKey minKey = new PartitionKey();
-        PartitionKey maxKey = new PartitionKey();
-        return prune(partitionListMap, 0, minKey, maxKey, 1);
-    }
-}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
index 6edf3fc023..f7c823aaaf 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
@@ -565,21 +565,11 @@ public class OlapScanNode extends ScanNode {
         }
 
         if (partitionInfo.getType() == PartitionType.RANGE) {
-            if (analyzer.partitionPruneV2Enabled()) {
-                partitionPruner = new RangePartitionPrunerV2(keyItemMap,
-                        partitionInfo.getPartitionColumns(), columnNameToRange);
-            } else {
-                partitionPruner = new RangePartitionPruner(keyItemMap,
-                        partitionInfo.getPartitionColumns(), columnFilters);
-            }
+            partitionPruner = new RangePartitionPrunerV2(keyItemMap,
+                    partitionInfo.getPartitionColumns(), columnNameToRange);
         } else if (partitionInfo.getType() == PartitionType.LIST) {
-            if (analyzer.partitionPruneV2Enabled()) {
-                partitionPruner = new ListPartitionPrunerV2(keyItemMap, partitionInfo.getPartitionColumns(),
-                        columnNameToRange);
-            } else {
-                partitionPruner = new ListPartitionPruner(keyItemMap,
-                        partitionInfo.getPartitionColumns(), columnFilters);
-            }
+            partitionPruner = new ListPartitionPrunerV2(keyItemMap, partitionInfo.getPartitionColumns(),
+                    columnNameToRange);
         }
         return partitionPruner.prune();
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/RangePartitionPruner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/RangePartitionPruner.java
deleted file mode 100644
index c61d312e91..0000000000
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/RangePartitionPruner.java
+++ /dev/null
@@ -1,194 +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.doris.planner;
-
-import org.apache.doris.analysis.InPredicate;
-import org.apache.doris.analysis.LiteralExpr;
-import org.apache.doris.analysis.NullLiteral;
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.PartitionItem;
-import org.apache.doris.catalog.PartitionKey;
-import org.apache.doris.catalog.Type;
-import org.apache.doris.common.AnalysisException;
-
-import com.google.common.collect.BoundType;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Range;
-import com.google.common.collect.RangeMap;
-import com.google.common.collect.Sets;
-import com.google.common.collect.TreeRangeMap;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class RangePartitionPruner implements PartitionPruner {
-    private static final Logger LOG = LogManager.getLogger(RangePartitionPruner.class);
-
-    private Map<Long, PartitionItem> partitionRangeMap;
-    private List<Column> partitionColumns;
-    private Map<String, PartitionColumnFilter> partitionColumnFilters;
-
-    public RangePartitionPruner(Map<Long, PartitionItem> rangeMap,
-                                List<Column> columns,
-                                Map<String, PartitionColumnFilter> filters) {
-        partitionRangeMap = rangeMap;
-        partitionColumns = columns;
-        partitionColumnFilters = filters;
-    }
-
-    private Collection<Long> prune(RangeMap<PartitionKey, Long> rangeMap,
-                                   int columnIdx,
-                                   PartitionKey minKey,
-                                   PartitionKey maxKey,
-                                   int complex)
-            throws AnalysisException {
-        LOG.debug("column idx {}, column filters {}", columnIdx, partitionColumnFilters);
-        // the last column in partition Key
-        if (columnIdx == partitionColumns.size()) {
-            try {
-                return Lists.newArrayList(rangeMap.subRangeMap(Range.closed(minKey, maxKey)).asMapOfRanges().values());
-            } catch (IllegalArgumentException e) {
-                return Lists.newArrayList();
-            }
-        }
-        // no filter in this column
-        Column keyColumn = partitionColumns.get(columnIdx);
-        PartitionColumnFilter filter = partitionColumnFilters.get(keyColumn.getName());
-        if (null == filter) {
-            minKey.pushColumn(LiteralExpr.createInfinity(Type.fromPrimitiveType(keyColumn.getDataType()), false),
-                    keyColumn.getDataType());
-            maxKey.pushColumn(LiteralExpr.createInfinity(Type.fromPrimitiveType(keyColumn.getDataType()), true),
-                    keyColumn.getDataType());
-            Collection<Long> result = null;
-            try {
-                result = Lists.newArrayList(
-                        rangeMap.subRangeMap(Range.closed(minKey, maxKey)).asMapOfRanges().values());
-            } catch (IllegalArgumentException e) {
-                result = Lists.newArrayList();
-            }
-            minKey.popColumn();
-            maxKey.popColumn();
-            return result;
-        }
-        InPredicate inPredicate = filter.getInPredicate();
-        if (null == inPredicate || inPredicate.getChildren().size() * complex > 100) {
-            if (filter.lowerBoundInclusive && filter.upperBoundInclusive
-                    && filter.lowerBound != null && filter.upperBound != null
-                    && 0 == filter.lowerBound.compareLiteral(filter.upperBound)) {
-
-                // eg: [10, 10], [null, null]
-                if (filter.lowerBound instanceof NullLiteral && filter.upperBound instanceof NullLiteral) {
-                    // replace Null with min value
-                    LiteralExpr minKeyValue = LiteralExpr.createInfinity(
-                            Type.fromPrimitiveType(keyColumn.getDataType()), false);
-                    minKey.pushColumn(minKeyValue, keyColumn.getDataType());
-                    maxKey.pushColumn(minKeyValue, keyColumn.getDataType());
-                } else {
-                    minKey.pushColumn(filter.lowerBound, keyColumn.getDataType());
-                    maxKey.pushColumn(filter.upperBound, keyColumn.getDataType());
-                }
-                Collection<Long> result = prune(rangeMap, columnIdx + 1, minKey, maxKey, complex);
-                minKey.popColumn();
-                maxKey.popColumn();
-                return result;
-            }
-
-            // no in predicate
-            BoundType lowerType = filter.lowerBoundInclusive ? BoundType.CLOSED : BoundType.OPEN;
-            BoundType upperType = filter.upperBoundInclusive ? BoundType.CLOSED : BoundType.OPEN;
-            int pushMinCount = 0;
-            int pushMaxCount = 0;
-            int lastColumnId = partitionColumns.size() - 1;
-            if (filter.lowerBound != null) {
-                minKey.pushColumn(filter.lowerBound, keyColumn.getDataType());
-                pushMinCount++;
-                if (filter.lowerBoundInclusive && columnIdx != lastColumnId) {
-                    Column column = partitionColumns.get(columnIdx + 1);
-                    Type type = Type.fromPrimitiveType(column.getDataType());
-                    minKey.pushColumn(LiteralExpr.createInfinity(type, false), column.getDataType());
-                    pushMinCount++;
-                }
-            } else {
-                Type type = Type.fromPrimitiveType(keyColumn.getDataType());
-                minKey.pushColumn(LiteralExpr.createInfinity(type, false), keyColumn.getDataType());
-                pushMinCount++;
-            }
-            if (filter.upperBound != null) {
-                maxKey.pushColumn(filter.upperBound, keyColumn.getDataType());
-                pushMaxCount++;
-                if (filter.upperBoundInclusive && columnIdx != lastColumnId) {
-                    Column column = partitionColumns.get(columnIdx + 1);
-                    maxKey.pushColumn(LiteralExpr.createInfinity(Type.fromPrimitiveType(column.getDataType()), true),
-                            column.getDataType());
-                    pushMaxCount++;
-                }
-            } else {
-                maxKey.pushColumn(LiteralExpr.createInfinity(Type.fromPrimitiveType(keyColumn.getDataType()), true),
-                        keyColumn.getDataType());
-                pushMaxCount++;
-            }
-
-            Collection<Long> result = null;
-            try {
-                result = Lists.newArrayList(rangeMap.subRangeMap(
-                            Range.range(minKey, lowerType, maxKey, upperType)).asMapOfRanges().values());
-            } catch (IllegalArgumentException e) {
-                result = Lists.newArrayList();
-            }
-
-            for (; pushMinCount > 0; pushMinCount--) {
-                minKey.popColumn();
-            }
-            for (; pushMaxCount > 0; pushMaxCount--) {
-                maxKey.popColumn();
-            }
-            return result;
-        }
-        Set<Long> resultSet = Sets.newHashSet();
-        int childrenNum = inPredicate.getChildren().size();
-        int newComplex = inPredicate.getChildren().size() * complex;
-        for (int i = 1; i < childrenNum; ++i) {
-            LiteralExpr expr = (LiteralExpr) inPredicate.getChild(i);
-            minKey.pushColumn(expr, keyColumn.getDataType());
-            maxKey.pushColumn(expr, keyColumn.getDataType());
-            Collection<Long> subList = prune(rangeMap, columnIdx + 1, minKey, maxKey, newComplex);
-            for (long partId : subList) {
-                resultSet.add(partId);
-            }
-            minKey.popColumn();
-            maxKey.popColumn();
-        }
-
-        return resultSet;
-    }
-
-    public Collection<Long> prune() throws AnalysisException {
-        PartitionKey minKey = new PartitionKey();
-        PartitionKey maxKey = new PartitionKey();
-        // Map to RangeMapTree
-        RangeMap<PartitionKey, Long> rangeMap = TreeRangeMap.create();
-        for (Map.Entry<Long, PartitionItem> entry : partitionRangeMap.entrySet()) {
-            rangeMap.put(entry.getValue().getItems(), entry.getKey());
-        }
-        return prune(rangeMap, 0, minKey, maxKey, 1);
-    }
-}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java
index 460ea01b7b..7733917087 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java
@@ -59,7 +59,7 @@ import java.util.Set;
 public abstract class ScanNode extends PlanNode {
     private static final Logger LOG = LogManager.getLogger(ScanNode.class);
     protected final TupleDescriptor desc;
-    // Use this if partition_prune_algorithm_version is 1.
+    // for distribution prunner
     protected Map<String, PartitionColumnFilter> columnFilters = Maps.newHashMap();
     // Use this if partition_prune_algorithm_version is 2.
     protected Map<String, ColumnRange> columnNameToRange = Maps.newHashMap();
@@ -137,17 +137,15 @@ public abstract class ScanNode extends PlanNode {
                 columnFilters.put(column.getName(), keyFilter);
             }
 
-            if (analyzer.partitionPruneV2Enabled()) {
-                ColumnRange columnRange = createColumnRange(slotDesc, conjuncts);
-                if (columnRange != null) {
-                    columnNameToRange.put(column.getName(), columnRange);
-                }
+            ColumnRange columnRange = createColumnRange(slotDesc, conjuncts);
+            if (columnRange != null) {
+                columnNameToRange.put(column.getName(), columnRange);
             }
         }
     }
 
-    private ColumnRange createColumnRange(SlotDescriptor desc,
-                                          List<Expr> conjuncts) {
+    public static ColumnRange createColumnRange(SlotDescriptor desc,
+            List<Expr> conjuncts) {
         ColumnRange result = ColumnRange.create();
         for (Expr expr : conjuncts) {
             if (!expr.isBound(desc.getId())) {
@@ -202,8 +200,8 @@ public abstract class ScanNode extends PlanNode {
         return result;
     }
 
-    private ColumnRanges expressionToRanges(Expr expr,
-                                            SlotDescriptor desc) {
+    public static ColumnRanges expressionToRanges(Expr expr,
+            SlotDescriptor desc) {
         if (expr instanceof IsNullPredicate) {
             IsNullPredicate isNullPredicate = (IsNullPredicate) expr;
             if (isNullPredicate.isSlotRefChildren() && !isNullPredicate.isNotNull()) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadPlanner.java
index 6aa9b4c66d..86a06980ef 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadPlanner.java
@@ -303,27 +303,28 @@ public class StreamLoadPlanner {
         if (destTable.getPartitionInfo().getType() != PartitionType.UNPARTITIONED && !conjuncts.isEmpty()) {
             PartitionInfo partitionInfo = destTable.getPartitionInfo();
             Map<Long, PartitionItem> itemById = partitionInfo.getIdToItem(false);
-            Map<String, PartitionColumnFilter> columnFilters = Maps.newHashMap();
+            Map<String, ColumnRange> columnNameToRange = Maps.newHashMap();
             for (Column column : partitionInfo.getPartitionColumns()) {
                 SlotDescriptor slotDesc = tupleDesc.getColumnSlot(column.getName());
                 if (null == slotDesc) {
                     continue;
                 }
-                PartitionColumnFilter keyFilter = SingleNodePlanner.createPartitionFilter(slotDesc, conjuncts);
-                if (null != keyFilter) {
-                    columnFilters.put(column.getName(), keyFilter);
+                ColumnRange columnRange = ScanNode.createColumnRange(slotDesc, conjuncts);
+                if (columnRange != null) {
+                    columnNameToRange.put(column.getName(), columnRange);
                 }
             }
-            if (columnFilters.isEmpty()) {
+            if (columnNameToRange.isEmpty()) {
                 return null;
             }
+
             PartitionPruner partitionPruner = null;
             if (destTable.getPartitionInfo().getType() == PartitionType.RANGE) {
-                partitionPruner = new RangePartitionPruner(itemById,
-                        partitionInfo.getPartitionColumns(), columnFilters);
+                partitionPruner = new RangePartitionPrunerV2(itemById,
+                        partitionInfo.getPartitionColumns(), columnNameToRange);
             } else if (destTable.getPartitionInfo().getType() == PartitionType.LIST) {
-                partitionPruner = new ListPartitionPruner(itemById,
-                        partitionInfo.getPartitionColumns(), columnFilters);
+                partitionPruner = new ListPartitionPrunerV2(itemById,
+                        partitionInfo.getPartitionColumns(), columnNameToRange);
             }
             partitionIds.addAll(partitionPruner.prune());
             return partitionIds;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 813a47e6c0..e87e247207 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -162,8 +162,6 @@ public class SessionVariable implements Serializable, Writable {
 
     public static final String EXTRACT_WIDE_RANGE_EXPR = "extract_wide_range_expr";
 
-    public static final String PARTITION_PRUNE_ALGORITHM_VERSION = "partition_prune_algorithm_version";
-
     // If user set a very small value, use this value instead.
     public static final long MIN_INSERT_VISIBLE_TIMEOUT_MS = 1000;
 
@@ -469,9 +467,6 @@ public class SessionVariable implements Serializable, Writable {
     @VariableMgr.VarAttr(name = EXTRACT_WIDE_RANGE_EXPR, needForward = true)
     public boolean extractWideRangeExpr = true;
 
-    @VariableMgr.VarAttr(name = PARTITION_PRUNE_ALGORITHM_VERSION, needForward = true)
-    public int partitionPruneAlgorithmVersion = 2;
-
     @VariableMgr.VarAttr(name = ENABLE_VECTORIZED_ENGINE)
     public boolean enableVectorizedEngine = true;
 
@@ -1201,10 +1196,6 @@ public class SessionVariable implements Serializable, Writable {
         return extractWideRangeExpr;
     }
 
-    public int getPartitionPruneAlgorithmVersion() {
-        return partitionPruneAlgorithmVersion;
-    }
-
     public int getCpuResourceLimit() {
         return cpuResourceLimit;
     }
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ListPartitionPrunerTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ListPartitionPrunerTest.java
index a377ef0d68..6d2cf7aa59 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ListPartitionPrunerTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ListPartitionPrunerTest.java
@@ -79,40 +79,40 @@ public class ListPartitionPrunerTest extends PartitionPruneTestBase {
 
     private void initTestCases() {
         // Select by partition name
-        addCase("select * from test.t1 partition p1;", "partitions=1/2", "partitions=1/2");
-        addCase("select * from test.t2 partition (p2, p3);", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t3 partition (p1, p2);", "partitions=2/2", "partitions=2/2");
-        addCase("select * from test.t4 partition p2;", "partitions=1/3", "partitions=1/3");
+        addCase("select * from test.t1 partition p1;", "partitions=1/2");
+        addCase("select * from test.t2 partition (p2, p3);", "partitions=2/3");
+        addCase("select * from test.t3 partition (p1, p2);", "partitions=2/2");
+        addCase("select * from test.t4 partition p2;", "partitions=1/3");
 
         // Single partition column
-        addCase("select * from test.t2 where k1 < 7", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t2 where k1 = 1;", "partitions=1/3", "partitions=1/3");
-        addCase("select * from test.t2 where k1 in (1, 2);", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t2 where k1 >= 6;", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t2 where k1 < 8 and k1 > 6;", "partitions=1/3", "partitions=1/3");
-        addCase("select * from test.t2 where k2 = \"beijing\";", "partitions=3/3", "partitions=3/3");
-        addCase("select * from test.t1 where k1 != 1", "partitions=2/2", "partitions=1/2");
-        addCase("select * from test.t4 where k2 != \"beijing\"", "partitions=3/3", "partitions=2/3");
+        addCase("select * from test.t2 where k1 < 7", "partitions=2/3");
+        addCase("select * from test.t2 where k1 = 1;", "partitions=1/3");
+        addCase("select * from test.t2 where k1 in (1, 2);", "partitions=2/3");
+        addCase("select * from test.t2 where k1 >= 6;", "partitions=2/3");
+        addCase("select * from test.t2 where k1 < 8 and k1 > 6;", "partitions=1/3");
+        addCase("select * from test.t2 where k2 = \"beijing\";", "partitions=3/3");
+        addCase("select * from test.t1 where k1 != 1", "partitions=1/2");
+        addCase("select * from test.t4 where k2 != \"beijing\"", "partitions=2/3");
 
         // Multiple partition columns
-        addCase("select * from test.t4 where k1 = 2;", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t4 where k2 = \"tianjin\";", "partitions=1/3", "partitions=1/3");
-        addCase("select * from test.t4 where k1 = 1 and k2 = \"shanghai\";", "partitions=2/3", "partitions=1/3");
-        addCase("select * from test.t4 where k1 in (1, 3) and k2 in (\"tianjin\", \"shanghai\");", "partitions=2/3", "partitions=1/3");
-        addCase("select * from test.t4 where k1 in (1, 3);", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t4 where k2 in (\"tianjin\", \"shanghai\");", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t4 where k1 < 3;", "partitions=3/3", "partitions=3/3");
-        addCase("select * from test.t4 where k1 > 2;", "partitions=1/3", "partitions=1/3");
-        addCase("select * from test.t4 where k2 <\"shanghai\";", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t4 where k2 >=\"shanghai\";", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t4 where k1 > 1 and k2 < \"shanghai\";", "partitions=2/3", "partitions=1/3");
-        addCase("select * from test.t4 where k1 >= 2 and k2 = \"shanghai\";", "partitions=2/3", "partitions=1/3");
+        addCase("select * from test.t4 where k1 = 2;", "partitions=2/3");
+        addCase("select * from test.t4 where k2 = \"tianjin\";", "partitions=1/3");
+        addCase("select * from test.t4 where k1 = 1 and k2 = \"shanghai\";", "partitions=1/3");
+        addCase("select * from test.t4 where k1 in (1, 3) and k2 in (\"tianjin\", \"shanghai\");", "partitions=1/3");
+        addCase("select * from test.t4 where k1 in (1, 3);", "partitions=2/3");
+        addCase("select * from test.t4 where k2 in (\"tianjin\", \"shanghai\");", "partitions=2/3");
+        addCase("select * from test.t4 where k1 < 3;", "partitions=3/3");
+        addCase("select * from test.t4 where k1 > 2;", "partitions=1/3");
+        addCase("select * from test.t4 where k2 <\"shanghai\";", "partitions=2/3");
+        addCase("select * from test.t4 where k2 >=\"shanghai\";", "partitions=2/3");
+        addCase("select * from test.t4 where k1 > 1 and k2 < \"shanghai\";", "partitions=1/3");
+        addCase("select * from test.t4 where k1 >= 2 and k2 = \"shanghai\";", "partitions=1/3");
 
         // Disjunctive predicates
-        addCase("select * from test.t2 where k1=1 or k1=4", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t4 where k1=1 or k1=3", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t4 where k2=\"tianjin\" or k2=\"shanghai\"", "partitions=2/3", "partitions=2/3");
-        addCase("select * from test.t4 where k1 > 1 or k2 < \"shanghai\"", "partitions=3/3", "partitions=3/3");
+        addCase("select * from test.t2 where k1=1 or k1=4", "partitions=2/3");
+        addCase("select * from test.t4 where k1=1 or k1=3", "partitions=2/3");
+        addCase("select * from test.t4 where k2=\"tianjin\" or k2=\"shanghai\"", "partitions=2/3");
+        addCase("select * from test.t4 where k1 > 1 or k2 < \"shanghai\"", "partitions=3/3");
     }
 
     @Test
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/PartitionPruneTestBase.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/PartitionPruneTestBase.java
index 95c4790bea..162a81ccb8 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/PartitionPruneTestBase.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/PartitionPruneTestBase.java
@@ -29,31 +29,26 @@ public abstract class PartitionPruneTestBase extends TestWithFeService {
 
     protected void doTest() throws Exception {
         for (RangePartitionPruneTest.TestCase testCase : cases) {
-            connectContext.getSessionVariable().partitionPruneAlgorithmVersion = 1;
-            assertExplainContains(1, testCase.sql, testCase.v1Result);
-            connectContext.getSessionVariable().partitionPruneAlgorithmVersion = 2;
-            assertExplainContains(2, testCase.sql, testCase.v2Result);
+            assertExplainContains(testCase.sql, testCase.result);
         }
     }
 
-    private void assertExplainContains(int version, String sql, String subString) throws Exception {
-        Assert.assertTrue(String.format("version=%d, sql=%s, expectResult=%s", version, sql, subString),
+    private void assertExplainContains(String sql, String subString) throws Exception {
+        Assert.assertTrue(String.format("sql=%s, expectResult=%s", sql, subString),
                 getSQLPlanOrErrorMsg("explain " + sql).contains(subString));
     }
 
-    protected void addCase(String sql, String v1Result, String v2Result) {
-        cases.add(new TestCase(sql, v1Result, v2Result));
+    protected void addCase(String sql, String result) {
+        cases.add(new TestCase(sql, result));
     }
 
     protected static class TestCase {
         final String sql;
-        final String v1Result;
-        final String v2Result;
+        final String result;
 
-        public TestCase(String sql, String v1Result, String v2Result) {
+        public TestCase(String sql, String v2Result) {
             this.sql = sql;
-            this.v1Result = v1Result;
-            this.v2Result = v2Result;
+            this.result = v2Result;
         }
     }
 }
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/RangePartitionPruneTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/RangePartitionPruneTest.java
index f1bbc3ba91..e8d05e3095 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/RangePartitionPruneTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/RangePartitionPruneTest.java
@@ -113,85 +113,86 @@ public class RangePartitionPruneTest extends PartitionPruneTestBase {
     private void initTestCases() {
         // 1. Single partition column
         // no filters
-        addCase("select * from test.t1", "partitions=8/8", "partitions=8/8");
+        addCase("select * from test.t1", "partitions=8/8");
         // equal to
-        addCase("select * from test.t1 where dt=20211122", "partitions=1/8", "partitions=1/8");
+        addCase("select * from test.t1 where dt=20211122", "partitions=1/8");
         // less than
-        addCase("select * from test.t1 where dt<20211122", "partitions=2/8", "partitions=2/8");
+        addCase("select * from test.t1 where dt<20211122", "partitions=2/8");
         // less than or equal
-        addCase("select * from test.t1 where dt<=20211122", "partitions=3/8", "partitions=3/8");
+        addCase("select * from test.t1 where dt<=20211122", "partitions=3/8");
         // greater than
-        addCase("select * from test.t1 where dt>20211122", "partitions=6/8", "partitions=6/8");
+        addCase("select * from test.t1 where dt>20211122", "partitions=6/8");
         // greater than or equal
-        addCase("select * from test.t1 where dt>=20211122", "partitions=6/8", "partitions=6/8");
+        addCase("select * from test.t1 where dt>=20211122", "partitions=6/8");
         // in
-        addCase("select * from test.t1 where dt in (20211124, 20211126, 20211122)", "partitions=3/8", "partitions=3/8");
+        addCase("select * from test.t1 where dt in (20211124, 20211126, 20211122)", "partitions=3/8");
         // is null
-        addCase("select * from test.t1 where dt is null", "partitions=1/8", "partitions=1/8");
-        addCase("select * from test.`single_not_null` where dt is null", "partitions=0/7", "partitions=0/7");
+        addCase("select * from test.t1 where dt is null", "partitions=1/8");
+        addCase("select * from test.`single_not_null` where dt is null", "partitions=0/7");
         // not equal to
-        addCase("select * from test.t1 where dt!=20211122", "partitions=8/8", "partitions=8/8");
+        addCase("select * from test.t1 where dt!=20211122", "partitions=8/8");
 
         // 2. Multiple partition columns
         // no filters
-        addCase("select * from test.t2", "partitions=9/9", "partitions=9/9");
+        addCase("select * from test.t2", "partitions=9/9");
         // equal to
-        addCase("select * from test.t2 where k1=7", "partitions=2/9", "partitions=2/9");
-        addCase("select * from test.t2 where k2=7", "partitions=9/9", "partitions=9/9");
+        addCase("select * from test.t2 where k1=7", "partitions=2/9");
+        addCase("select * from test.t2 where k2=7", "partitions=9/9");
         // less than
-        addCase("select * from test.t2 where k1<7", "partitions=2/9", "partitions=2/9");
-        addCase("select * from test.t2 where k2<7", "partitions=9/9", "partitions=9/9");
+        addCase("select * from test.t2 where k1<7", "partitions=2/9");
+        addCase("select * from test.t2 where k2<7", "partitions=9/9");
         // less than or equal
-        addCase("select * from test.t2 where k1<=7", "partitions=3/9", "partitions=3/9");
-        addCase("select * from test.t2 where k2>7", "partitions=9/9", "partitions=9/9");
+        addCase("select * from test.t2 where k1<=7", "partitions=3/9");
+        addCase("select * from test.t2 where k2>7", "partitions=9/9");
         // greater than or equal
-        addCase("select * from test.t2 where k1>=7", "partitions=8/9", "partitions=8/9");
-        addCase("select * from test.t2 where k2>=7", "partitions=9/9", "partitions=9/9");
+        addCase("select * from test.t2 where k1>=7", "partitions=8/9");
+        addCase("select * from test.t2 where k2>=7", "partitions=9/9");
         // in
-        addCase("select * from test.t2 where k1 in (7,9,16)", "partitions=3/9", "partitions=3/9");
-        addCase("select * from test.t2 where k2 in (7,9,16)", "partitions=9/9", "partitions=9/9");
+        addCase("select * from test.t2 where k1 in (7,9,16)", "partitions=3/9");
+        addCase("select * from test.t2 where k2 in (7,9,16)", "partitions=9/9");
         // is null
-        addCase("select * from test.t2 where k1 is null", "partitions=1/9", "partitions=1/9");
-        addCase("select * from test.t2 where k2 is null", "partitions=9/9", "partitions=9/9");
-        addCase("select * from test.multi_not_null where k1 is null", "partitions=0/2", "partitions=0/2");
-        addCase("select * from test.multi_not_null where k2 is null", "partitions=2/2", "partitions=2/2");
+        addCase("select * from test.t2 where k1 is null", "partitions=1/9");
+        addCase("select * from test.t2 where k2 is null", "partitions=9/9");
+        addCase("select * from test.multi_not_null where k1 is null", "partitions=0/2");
+        addCase("select * from test.multi_not_null where k2 is null", "partitions=2/2");
         // not equal to
-        addCase("select * from test.t2 where k1!=23", "partitions=9/9", "partitions=9/9");
-        addCase("select * from test.t2 where k2!=23", "partitions=9/9", "partitions=9/9");
+        addCase("select * from test.t2 where k1!=23", "partitions=9/9");
+        addCase("select * from test.t2 where k2!=23", "partitions=9/9");
 
         // 3. Conjunctive predicates
         // equal to and other predicates
-        addCase("select * from test.t2 where k1=23 and k2=5", "partitions=1/9", "partitions=1/9");
-        addCase("select * from test.t2 where k1=23 and k2>5", "partitions=1/9", "partitions=1/9");
+        addCase("select * from test.t2 where k1=23 and k2=5", "partitions=1/9");
+        addCase("select * from test.t2 where k1=23 and k2>5", "partitions=1/9");
         // in and other equal predicates
-        addCase("select * from test.t2 where k1 in (3, 10, 13) and k2>10", "partitions=2/9", "partitions=2/9");
+        addCase("select * from test.t2 where k1 in (3, 10, 13) and k2>10", "partitions=2/9");
         // is null and other predicates
-        addCase("select * from test.t2 where k1 > 10 and k1 is null", "partitions=1/9", "partitions=0/9");
-        addCase("select * from test.t2 where k1 is null and k1 > 10", "partitions=1/9", "partitions=0/9");
-        addCase("select * from test.multi_not_null where k1 > 10 and k1 is null", "partitions=0/2", "partitions=0/2");
+        addCase("select * from test.t2 where k1 > 10 and k1 is null", "partitions=0/9");
+        addCase("select * from test.t2 where k1 is null and k1 > 10", "partitions=0/9");
+        addCase("select * from test.multi_not_null where k1 > 10 and k1 is null", "partitions=0/2");
         // others predicates combination
-        addCase("select * from test.t2 where k1 > 10 and k2 < 4", "partitions=6/9", "partitions=6/9");
-        addCase("select * from test.t2 where k1 >10 and k1 < 10 and (k1=11 or k1=12)", "partitions=1/9", "partitions=0/9");
-        addCase("select * from test.t2 where k1 > 20 and k1 < 7 and k1 = 10", "partitions=0/9", "partitions=0/9");
+        addCase("select * from test.t2 where k1 > 10 and k2 < 4", "partitions=6/9");
+        addCase("select * from test.t2 where k1 >10 and k1 < 10 and (k1=11 or k1=12)", "partitions=0/9");
+        addCase("select * from test.t2 where k1 > 20 and k1 < 7 and k1 = 10", "partitions=0/9");
 
         // 4. Disjunctive predicates
-        addCase("select * from test.t2 where k1=10 or k1=23", "partitions=3/9", "partitions=3/9");
-        addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=4 or k2=5)", "partitions=1/9", "partitions=1/9");
-        addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=4 or k2=11)", "partitions=2/9", "partitions=2/9");
-        addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=3 or k2=4 or k2=11)", "partitions=3/9", "partitions=3/9");
-        addCase("select * from test.t1 where dt=20211123 or dt=20211124", "partitions=2/8", "partitions=2/8");
-        addCase("select * from test.t1 where ((dt=20211123 and k1=1) or (dt=20211125 and k1=3))", "partitions=8/8", "partitions=2/8");
+        addCase("select * from test.t2 where k1=10 or k1=23", "partitions=3/9");
+        addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=4 or k2=5)", "partitions=1/9");
+        addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=4 or k2=11)", "partitions=2/9");
+        addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=3 or k2=4 or k2=11)", "partitions=3/9");
+        addCase("select * from test.t1 where dt=20211123 or dt=20211124", "partitions=2/8");
+        addCase("select * from test.t1 where ((dt=20211123 and k1=1) or (dt=20211125 and k1=3))", "partitions=2/8");
         // TODO: predicates are "PREDICATES: ((`dt` = 20211123 AND `k1` = 1) OR (`dt` = 20211125 AND `k1` = 3)), `k2` > ",
         // maybe something goes wrong with ExtractCommonFactorsRule.
-        addCase("select * from test.t1 where ((dt=20211123 and k1=1) or (dt=20211125 and k1=3)) and k2>0", "partitions=8/8", "partitions=2/8");
-        addCase("select * from test.t2 where k1 > 10 or k2 < 1", "partitions=9/9", "partitions=9/9");
+        addCase("select * from test.t1 where ((dt=20211123 and k1=1) or (dt=20211125 and k1=3)) and k2>0",
+                "partitions=2/8");
+        addCase("select * from test.t2 where k1 > 10 or k2 < 1", "partitions=9/9");
         // add some cases for CompoundPredicate
         addCase("select * from test.t1 where (dt >= 20211121 and dt <= 20211122) or (dt >= 20211123 and dt <= 20211125)",
-                "partitions=8/8", "partitions=5/8");
+                "partitions=5/8");
         addCase("select * from test.t1 where (dt between 20211121 and 20211122) or (dt between 20211123 and 20211125)",
-                "partitions=8/8", "partitions=5/8");
+                "partitions=5/8");
         addCase("select * from test.t1 where (dt between 20211121 and 20211122) or dt is null or (dt between 20211123 and 20211125)",
-                "partitions=8/8", "partitions=6/8");
+                "partitions=6/8");
 
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org