From 12d388ef3f4282cf204d5736c782f01cdaaf1117 Mon Sep 17 00:00:00 2001 From: minghong Date: Mon, 15 Jul 2024 15:50:38 +0800 Subject: [PATCH 1/2] fix bug: after is-null stats derive, other column stats are dropped --- .../org/apache/doris/nereids/stats/StatsCalculator.java | 7 +++++-- 1 file changed, 5 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 f83521ae031c5e..20db96ee1ec4cf 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 @@ -829,17 +829,20 @@ 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 + for (Expression expr : isNullStats.columnStatistics().keySet()) { + stats.addColumnStats(expr, isNullStats.findColumnStatistics(expr)); + } } } } From 4f896ffeb022989289e3e01a99b14015f3b7e242 Mon Sep 17 00:00:00 2001 From: minghong Date: Mon, 15 Jul 2024 18:05:00 +0800 Subject: [PATCH 2/2] fix --- .../org/apache/doris/nereids/stats/StatsCalculator.java | 6 +++++- 1 file changed, 5 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 20db96ee1ec4cf..8785be7eb9335a 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 @@ -840,9 +840,13 @@ private Statistics computeFilter(Filter filter) { ((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()) { - stats.addColumnStats(expr, isNullStats.findColumnStatistics(expr)); + builder.putColumnStatistics(expr, isNullStats.findColumnStatistics(expr)); } + builder.setRowCount(isNullStats.getRowCount()); + stats = builder.build(); + stats.enforceValid(); } } }