This is an automated email from the ASF dual-hosted git repository. morrysnow 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 9ae5ec4dc5 [fix](nereids) PushdownExpressionsInHashCondition contains duplicate column and WindowExpression miss column stats (#17624) 9ae5ec4dc5 is described below commit 9ae5ec4dc5a7bb504dba928f0030ee78031d3fda Author: minghong <engle...@gmail.com> AuthorDate: Fri Mar 10 16:08:43 2023 +0800 [fix](nereids) PushdownExpressionsInHashCondition contains duplicate column and WindowExpression miss column stats (#17624) tpcds: q47 and q57 1. PushdownExpressionsInHashCondition:project contains duplicate column 2. WindowExpression stats caclucate: miss column stats --- .../PushdownExpressionsInHashCondition.java | 28 +++++++++++++++------- .../doris/nereids/stats/StatsCalculator.java | 1 + 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushdownExpressionsInHashCondition.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushdownExpressionsInHashCondition.java index 6f1d6e68b0..bc92d8f37c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushdownExpressionsInHashCondition.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushdownExpressionsInHashCondition.java @@ -25,6 +25,7 @@ import org.apache.doris.nereids.trees.expressions.EqualTo; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.NamedExpression; import org.apache.doris.nereids.trees.expressions.Slot; +import org.apache.doris.nereids.trees.expressions.SlotReference; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.logical.LogicalJoin; import org.apache.doris.nereids.trees.plans.logical.LogicalProject; @@ -33,7 +34,6 @@ import org.apache.doris.nereids.util.JoinUtils; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -42,6 +42,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** * push down expression which is not slot reference @@ -70,7 +71,7 @@ public class PushdownExpressionsInHashCondition extends OneRewriteRuleFactory { .then(join -> { List<List<Expression>> exprsOfHashConjuncts = Lists.newArrayList(Lists.newArrayList(), Lists.newArrayList()); - Map<Expression, Alias> exprMap = Maps.newHashMap(); + Map<Expression, NamedExpression> exprMap = Maps.newHashMap(); join.getHashJoinConjuncts().forEach(conjunct -> { Preconditions.checkArgument(conjunct instanceof EqualTo); // sometimes: t1 join t2 on t2.a + 1 = t1.a + 2, so check the situation, but actually it @@ -79,8 +80,13 @@ public class PushdownExpressionsInHashCondition extends OneRewriteRuleFactory { (EqualTo) conjunct, join.left().getOutputSet()); exprsOfHashConjuncts.get(0).add(conjunct.child(0)); exprsOfHashConjuncts.get(1).add(conjunct.child(1)); - conjunct.children().forEach(expr -> - exprMap.put(expr, new Alias(expr, "expr_" + expr.toSql()))); + conjunct.children().forEach(expr -> { + if ((expr instanceof SlotReference)) { + exprMap.put(expr, (SlotReference) expr); + } else { + exprMap.put(expr, new Alias(expr, "expr_" + expr.toSql())); + } + }); }); Iterator<List<Expression>> iter = exprsOfHashConjuncts.iterator(); return join.withHashJoinConjunctsAndChildren( @@ -90,10 +96,16 @@ public class PushdownExpressionsInHashCondition extends OneRewriteRuleFactory { .collect(ImmutableList.toImmutableList()))) .collect(ImmutableList.toImmutableList()), join.children().stream().map( - plan -> new LogicalProject<>(new Builder<NamedExpression>() - .addAll(iter.next().stream().map(exprMap::get) - .collect(ImmutableList.toImmutableList())) - .addAll(getOutput(plan, join)).build(), plan)) + plan -> { + Set<NamedExpression> projectSet = Sets.newHashSet(); + projectSet.addAll(iter.next().stream().map(exprMap::get) + .collect(Collectors.toList())); + projectSet.addAll(getOutput(plan, join)); + List<NamedExpression> projectList = projectSet.stream() + .collect(ImmutableList.toImmutableList()); + return new LogicalProject<>(projectList, plan); + } + ) .collect(ImmutableList.toImmutableList())); }).toRule(RuleType.PUSHDOWN_EXPRESSIONS_IN_HASH_CONDITIONS); } 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 1d9e223890..bcb9e83a68 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 @@ -666,6 +666,7 @@ public class StatsCalculator extends DefaultPlanVisitor<StatsDeriveResult, Void> } return Pair.of(expr.toSlot().getExprId(), value); }).collect(Collectors.toMap(Pair::key, Pair::value)); + columnStatisticMap.putAll(childColumnStats); return new StatsDeriveResult(stats.getRowCount(), columnStatisticMap); } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org