From 5298249c659055e87e17e17b812a6232d6d8c1e8 Mon Sep 17 00:00:00 2001 From: minghong Date: Mon, 15 Jul 2024 15:50:38 +0800 Subject: [PATCH] fix bug: after is-null stats derive, other column stats are dropped --- .../apache/doris/nereids/stats/StatsCalculator.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 5cc5ed90031ad8..0a356f0a42f346 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 @@ -832,17 +832,24 @@ private Statistics computeFilter(Filter filter) { Statistics isNullStats = computeGeneratedIsNullStats((LogicalJoin) plan, filter); if (isNullStats != null) { // overwrite the stats corrected as above before passing to filter estimation - stats = isNullStats; Set newConjuncts = filter.getConjuncts().stream() .filter(e -> !(e instanceof IsNull)) .collect(Collectors.toSet()); if (newConjuncts.isEmpty()) { - return stats; + return isNullStats; } else { // overwrite the filter by removing is null and remain the others filter = ((LogicalFilter) filter).withConjunctsAndProps(newConjuncts, ((LogicalFilter) filter).getGroupExpression(), Optional.of(((LogicalFilter) filter).getLogicalProperties()), plan); + // add update is-null related column stats for other predicate derive + StatisticsBuilder builder = new StatisticsBuilder(stats); + for (Expression expr : isNullStats.columnStatistics().keySet()) { + builder.putColumnStatistics(expr, isNullStats.findColumnStatistics(expr)); + } + builder.setRowCount(isNullStats.getRowCount()); + stats = builder.build(); + stats.enforceValid(); } } }