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

morrysnow 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 86b2cf810e6 [chore](Nereids) explode function stats configurable 
(#31807)
86b2cf810e6 is described below

commit 86b2cf810e6b872dd263fe568896d02baa214af7
Author: xzj7019 <131111794+xzj7...@users.noreply.github.com>
AuthorDate: Wed Mar 6 21:18:12 2024 +0800

    [chore](Nereids) explode function stats configurable (#31807)
    
    master pr: #31332
---
 .../doris/nereids/stats/StatsCalculator.java       |  3 +-
 .../java/org/apache/doris/qe/SessionVariable.java  | 34 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
index ce35b301589..03f15e5441b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
@@ -940,7 +940,8 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
 
     private Statistics computeGenerate(Generate generate) {
         Statistics stats = groupExpression.childStatistics(0);
-        double count = stats.getRowCount() * 
generate.getGeneratorOutput().size() * 5;
+        int statsFactor = 
ConnectContext.get().getSessionVariable().generateStatsFactor;
+        double count = stats.getRowCount() * 
generate.getGeneratorOutput().size() * statsFactor;
         Map<Expression, ColumnStatistic> columnStatsMap = Maps.newHashMap();
         for (Map.Entry<Expression, ColumnStatistic> entry : 
stats.columnStatistics().entrySet()) {
             ColumnStatistic columnStatistic = new 
ColumnStatisticBuilder(entry.getValue()).setCount(count).build();
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 12083f17c13..55066fab565 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
@@ -431,6 +431,8 @@ public class SessionVariable implements Serializable, 
Writable {
     public static final String HUGE_TABLE_DEFAULT_SAMPLE_ROWS = 
"huge_table_default_sample_rows";
     public static final String HUGE_TABLE_LOWER_BOUND_SIZE_IN_BYTES = 
"huge_table_lower_bound_size_in_bytes";
 
+    public static final String GENERATE_STATS_FACTOR = "generate_stats_factor";
+
     public static final String HUGE_TABLE_AUTO_ANALYZE_INTERVAL_IN_MILLIS
             = "huge_table_auto_analyze_interval_in_millis";
 
@@ -648,6 +650,13 @@ public class SessionVariable implements Serializable, 
Writable {
     @VariableMgr.VarAttr(name = ENABLE_BUCKET_SHUFFLE_DOWNGRADE, needForward = 
true)
     public boolean enableBucketShuffleDownGrade = false;
 
+    /**
+     * explode function row count enlarge factor.
+     */
+    @VariableMgr.VarAttr(name = GENERATE_STATS_FACTOR, checker = 
"checkGenerateStatsFactor",
+            setter = "setGenerateStatsFactor")
+    public int generateStatsFactor = 5;
+
     @VariableMgr.VarAttr(name = PREFER_JOIN_METHOD)
     public String preferJoinMethod = "broadcast";
 
@@ -2362,6 +2371,31 @@ public class SessionVariable implements Serializable, 
Writable {
         }
     }
 
+    public void checkGenerateStatsFactor(String generateStatsFactor) {
+        int value = Integer.valueOf(generateStatsFactor);
+        if (value <= 0) {
+            UnsupportedOperationException exception =
+                    new UnsupportedOperationException("Generate stats factor " 
+ value + " should greater than 0");
+            LOG.warn("Check generate stats factor failed", exception);
+            throw exception;
+        }
+    }
+
+    public void setGenerateStatsFactor(int factor) {
+        this.generateStatsFactor = factor;
+        if (factor <= 0) {
+            LOG.warn("Invalid generate stats factor: {}", factor, new 
RuntimeException(""));
+        }
+    }
+
+    public void setGenerateStatsFactor(String factor) {
+        this.generateStatsFactor = Integer.valueOf(factor);
+        if (generateStatsFactor <= 0) {
+            LOG.warn("Invalid generate stats factor: {}", generateStatsFactor, 
new RuntimeException(""));
+        }
+    }
+
+
     public boolean isEnableFileCache() {
         return enableFileCache;
     }


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

Reply via email to