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

yiguolei 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 d26bfe030a8 [nereids] explode function stats configurable (#31332)
d26bfe030a8 is described below

commit d26bfe030a810219d616841f8048a0333097f97b
Author: xzj7019 <[email protected]>
AuthorDate: Thu Feb 29 23:52:19 2024 +0800

    [nereids] explode function stats configurable (#31332)
    
    
    
    ---------
    
    Co-authored-by: zhongjian.xzj 
<[email protected]>
---
 .../doris/nereids/stats/StatsCalculator.java       |  3 +-
 .../java/org/apache/doris/qe/SessionVariable.java  | 33 ++++++++++++++++++++++
 2 files changed, 35 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 ad16d3e8f50..08d4a3e781c 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
@@ -957,7 +957,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 ff9916ad717..5f7e8ebc32e 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
@@ -479,6 +479,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";
 
@@ -740,6 +742,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";
 
@@ -3331,6 +3340,30 @@ 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 getEnableDescribeExtendVariantColumn() {
         return enableDescribeExtendVariantColumn;
     }


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

Reply via email to