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

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 932cb20d598 [pick](Nereids) temporary partition is selected only if 
user manually specified: Branch-2.0 #27893 (#27905)
932cb20d598 is described below

commit 932cb20d5983576c83f2951debe67e5302865bfe
Author: minghong <[email protected]>
AuthorDate: Sat Dec 2 19:11:14 2023 +0800

    [pick](Nereids) temporary partition is selected only if user manually 
specified: Branch-2.0 #27893 (#27905)
---
 .../rules/expression/rules/PartitionPruner.java        | 10 ----------
 .../nereids/rules/rewrite/PruneOlapScanPartition.java  | 18 ++++++++++++------
 2 files changed, 12 insertions(+), 16 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/PartitionPruner.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/PartitionPruner.java
index a0336295476..ae3a5add083 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/PartitionPruner.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/PartitionPruner.java
@@ -18,7 +18,6 @@
 package org.apache.doris.nereids.rules.expression.rules;
 
 import org.apache.doris.catalog.ListPartitionItem;
-import org.apache.doris.catalog.PartitionInfo;
 import org.apache.doris.catalog.PartitionItem;
 import org.apache.doris.catalog.RangePartitionItem;
 import org.apache.doris.nereids.CascadesContext;
@@ -98,15 +97,6 @@ public class PartitionPruner extends 
DefaultExpressionRewriter<Void> {
                 .collect(ImmutableList.toImmutableList());
     }
 
-    /**
-     * prune partition with `partitionInfo` as parameter.
-     */
-    public static List<Long> prune(List<Slot> partitionSlots, Expression 
partitionPredicate,
-            PartitionInfo partitionInfo, CascadesContext cascadesContext, 
PartitionTableType partitionTableType) {
-        return prune(partitionSlots, partitionPredicate, 
partitionInfo.getAllPartitions(), cascadesContext,
-                partitionTableType);
-    }
-
     /**
      * prune partition with `idToPartitions` as parameter.
      */
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PruneOlapScanPartition.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PruneOlapScanPartition.java
index 1bdff7f6c10..655b8c7976b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PruneOlapScanPartition.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PruneOlapScanPartition.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.rules.rewrite;
 
 import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.PartitionInfo;
+import org.apache.doris.catalog.PartitionItem;
 import org.apache.doris.nereids.rules.Rule;
 import org.apache.doris.nereids.rules.RuleType;
 import org.apache.doris.nereids.rules.expression.rules.PartitionPruner;
@@ -29,7 +30,6 @@ import 
org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
 import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.collect.ImmutableList;
-import org.apache.commons.collections.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -64,15 +64,21 @@ public class PruneOlapScanPartition extends 
OneRewriteRuleFactory {
                     .stream()
                     .map(column -> 
scanOutput.get(column.getName().toLowerCase()))
                     .collect(Collectors.toList());
+            List<Long> manuallySpecifiedPartitions = 
scan.getManuallySpecifiedPartitions();
 
+            Map<Long, PartitionItem> idToPartitions;
+            if (manuallySpecifiedPartitions.isEmpty()) {
+                idToPartitions = partitionInfo.getIdToItem(false);
+            } else {
+                Map<Long, PartitionItem> allPartitions = 
partitionInfo.getAllPartitions();
+                idToPartitions = allPartitions.keySet().stream()
+                        .filter(id -> manuallySpecifiedPartitions.contains(id))
+                        .collect(Collectors.toMap(Function.identity(), id -> 
allPartitions.get(id)));
+            }
             List<Long> prunedPartitions = new 
ArrayList<>(PartitionPruner.prune(
-                    partitionSlots, filter.getPredicate(), partitionInfo, 
ctx.cascadesContext,
+                    partitionSlots, filter.getPredicate(), idToPartitions, 
ctx.cascadesContext,
                     PartitionTableType.OLAP));
 
-            List<Long> manuallySpecifiedPartitions = 
scan.getManuallySpecifiedPartitions();
-            if (!CollectionUtils.isEmpty(manuallySpecifiedPartitions)) {
-                prunedPartitions.retainAll(manuallySpecifiedPartitions);
-            }
             LogicalOlapScan rewrittenScan = 
scan.withSelectedPartitionIds(ImmutableList.copyOf(prunedPartitions));
             return new LogicalFilter<>(filter.getConjuncts(), rewrittenScan);
         }).toRule(RuleType.OLAP_SCAN_PARTITION_PRUNE);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to