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]