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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]