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

huajianlan 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 7631f2b8de5 [feature](partition prune) Add variable 
skip_prune_predicate to skip prune predicate after partition prune (#57688)
7631f2b8de5 is described below

commit 7631f2b8de5816a6283d5d7c46aa016b2011cd7d
Author: feiniaofeiafei <[email protected]>
AuthorDate: Wed Nov 5 16:08:03 2025 +0800

    [feature](partition prune) Add variable skip_prune_predicate to skip prune 
predicate after partition prune (#57688)
    
    Add session variable skip_prune_predicate to skip prune predicate after
    partition prune.
    
    Related PR: #57169
---
 .../doris/nereids/rules/rewrite/PruneOlapScanPartition.java   |  4 +++-
 .../src/main/java/org/apache/doris/qe/SessionVariable.java    | 11 +++++++++++
 .../partition_prune/list_prune_predicate.groovy               | 10 +++++++++-
 3 files changed, 23 insertions(+), 2 deletions(-)

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 14c41b25bcf..937f7ed5d50 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
@@ -90,7 +90,9 @@ public class PruneOlapScanPartition implements 
RewriteRuleFactory {
                         if (rewrittenLogicalRelation instanceof 
LogicalEmptyRelation) {
                             return rewrittenLogicalRelation;
                         } else {
-                            return 
PartitionPruner.prunePredicate(ctx.statementContext.isSkipPrunePredicate(),
+                            return PartitionPruner.prunePredicate(
+                                    
ctx.connectContext.getSessionVariable().skipPrunePredicate
+                                            || 
ctx.statementContext.isSkipPrunePredicate(),
                                     prunedRes.second, filter, 
rewrittenLogicalRelation);
                         }
                     }).toRule(RuleType.OLAP_SCAN_PARTITION_PRUNE)
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 56a92580e23..52b1d90ac26 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
@@ -185,6 +185,7 @@ public class SessionVariable implements Serializable, 
Writable {
     public static final String ENABLE_REWRITE_ELEMENT_AT_TO_SLOT = 
"enable_rewrite_element_at_to_slot";
     public static final String ENABLE_ODBC_TRANSCATION = 
"enable_odbc_transcation";
     public static final String ENABLE_BINARY_SEARCH_FILTERING_PARTITIONS = 
"enable_binary_search_filtering_partitions";
+    public static final String SKIP_PRUNE_PREDICATE = "skip_prune_predicate";
     public static final String ENABLE_SQL_CACHE = "enable_sql_cache";
     public static final String ENABLE_HIVE_SQL_CACHE = "enable_hive_sql_cache";
     public static final String ENABLE_QUERY_CACHE = "enable_query_cache";
@@ -1287,6 +1288,16 @@ public class SessionVariable implements Serializable, 
Writable {
     )
     public boolean enableBinarySearchFilteringPartitions = true;
 
+    @VariableMgr.VarAttr(name = SKIP_PRUNE_PREDICATE, fuzzy = true,
+            description = {
+                    "是否跳过“在分区裁剪后删除恒真谓词”的优化。默认为OFF(即执行此优化)。",
+                    "Skips the removal of always-true predicates after 
partition pruning. "
+                            + "Defaults to OFF (optimization is active)."
+            }
+    )
+    public boolean skipPrunePredicate = false;
+
+
     @VariableMgr.VarAttr(name = ENABLE_SQL_CACHE, fuzzy = true)
     public boolean enableSqlCache = true;
 
diff --git 
a/regression-test/suites/nereids_rules_p0/partition_prune/list_prune_predicate.groovy
 
b/regression-test/suites/nereids_rules_p0/partition_prune/list_prune_predicate.groovy
index 37d97bdda17..007f98b0db8 100644
--- 
a/regression-test/suites/nereids_rules_p0/partition_prune/list_prune_predicate.groovy
+++ 
b/regression-test/suites/nereids_rules_p0/partition_prune/list_prune_predicate.groovy
@@ -310,11 +310,19 @@ suite("list_prune_predicate") {
     explain {
         sql "select * from list_par_data_migration partition p1 where k1=2 
order by k1;"
         contains("partitions=1/3 (p1)")
-        contains("PREDICATES")
+        // k1=2 can not be deleted because k1=2 is not always true in p1
+        contains("PREDICATES: (k1[#0] = 2)")
     }
     explain {
         sql "select * from list_par_data_migration partition p1 where k1=1 or 
k1=2 or k1=3 or k1=4 order by k1;"
         contains("partitions=1/3 (p1)")
         notContains("PREDICATES")
     }
+
+    sql "set skip_prune_predicate = true"
+    explain {
+        sql "select * from list_par_data_migration partition p1 where k1=1 or 
k1=2 or k1=3 or k1=4 order by k1;"
+        contains("partitions=1/3 (p1)")
+        contains("PREDICATES")
+    }
 }
\ No newline at end of file


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

Reply via email to