englefly commented on code in PR #40698:
URL: https://github.com/apache/doris/pull/40698#discussion_r1756021675
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/stats/ExpressionEstimation.java:
##########
@@ -430,7 +457,14 @@ public ColumnStatistic visitBoundFunction(BoundFunction
boundFunction, Statistic
@Override
public ColumnStatistic visitAggregateExpression(AggregateExpression
aggregateExpression,
Statistics context) {
- return aggregateExpression.child().accept(this, context);
+ ColumnStatistic columnStat = aggregateExpression.child().accept(this,
context);
+ if (columnStat.isUnKnown) {
+ return ColumnStatistic.UNKNOWN;
+ }
+ return new ColumnStatisticBuilder(columnStat)
+ .setMinExpr(null).setMinValue(Double.NEGATIVE_INFINITY)
Review Comment:
keep the min/max
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/stats/ExpressionEstimation.java:
##########
@@ -344,6 +351,8 @@ public ColumnStatistic visitMin(Min min, Statistics
context) {
}
// if this is scalar agg, we will update count and ndv to 1 when
visiting group clause
return new ColumnStatisticBuilder(columnStat)
+ .setMinExpr(null).setMinValue(Double.NEGATIVE_INFINITY)
Review Comment:
min/max of Min(A) is the same as that of A.
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/stats/ExpressionEstimation.java:
##########
@@ -356,27 +365,45 @@ public ColumnStatistic visitMax(Max max, Statistics
context) {
}
// if this is scalar agg, we will update count and ndv to 1 when
visiting group clause
return new ColumnStatisticBuilder(columnStat)
+ .setMinExpr(null).setMinValue(Double.NEGATIVE_INFINITY)
Review Comment:
min/max of Max(A) is the same as that of A
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java:
##########
@@ -332,7 +332,8 @@ private Statistics estimateEqualTo(ComparisonPredicate cp,
ColumnStatistic stats
} else {
double val = statsForRight.maxValue;
if (val > statsForLeft.maxValue || val <
statsForLeft.minValue) {
- selectivity = 0.0;
+ // do a lower bound protection to avoid using 0 directly
+ selectivity = RANGE_SELECTIVITY_THRESHOLD;
Review Comment:
不必在这里限制。所有的比较操作,我们统一限制了。
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/stats/ExpressionEstimation.java:
##########
@@ -356,27 +365,45 @@ public ColumnStatistic visitMax(Max max, Statistics
context) {
}
// if this is scalar agg, we will update count and ndv to 1 when
visiting group clause
return new ColumnStatisticBuilder(columnStat)
+ .setMinExpr(null).setMinValue(Double.NEGATIVE_INFINITY)
+ .setMaxExpr(null).setMaxValue(Double.POSITIVE_INFINITY)
.build();
}
@Override
public ColumnStatistic visitCount(Count count, Statistics context) {
double width = count.getDataType().width();
// for scalar agg, ndv and row count will be normalized by 1 in
StatsCalculator.computeAggregate()
- return new
ColumnStatisticBuilder(ColumnStatistic.UNKNOWN).setCount(context.getRowCount())
- .setAvgSizeByte(width).build();
+ return new ColumnStatisticBuilder(ColumnStatistic.UNKNOWN)
+ .setCount(context.getRowCount())
+ .setAvgSizeByte(width)
+ .build();
}
// TODO: return a proper estimated stat after supports histogram
@Override
public ColumnStatistic visitSum(Sum sum, Statistics context) {
- return sum.child().accept(this, context);
+ ColumnStatistic columnStat = sum.child().accept(this, context);
+ if (columnStat.isUnKnown) {
+ return ColumnStatistic.UNKNOWN;
+ }
+ return new ColumnStatisticBuilder(columnStat)
+ .setMinExpr(null).setMinValue(Double.NEGATIVE_INFINITY)
+ .setMaxExpr(null).setMaxValue(Double.POSITIVE_INFINITY)
+ .build();
}
// TODO: return a proper estimated stat after supports histogram
@Override
public ColumnStatistic visitAvg(Avg avg, Statistics context) {
- return avg.child().accept(this, context);
+ ColumnStatistic columnStat = avg.child().accept(this, context);
+ if (columnStat.isUnKnown) {
+ return ColumnStatistic.UNKNOWN;
+ }
+ return new ColumnStatisticBuilder(columnStat)
+ .setMinExpr(null).setMinValue(Double.NEGATIVE_INFINITY)
Review Comment:
min/max of Avg(A) is the same as that of A
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]