morrySnow opened a new pull request, #26326:
URL: https://github.com/apache/doris/pull/26326

   we use a map to record rewrite cte children result to avoid rewrite twice in 
cost based rewritter. However, we record cte outer and inner in one map, and 
use null as outer result's key, use cte id as inner result's key. This is 
wrong, because every anchor has an outer, and we could only record one outer. 
So when we use the cache in cost based rewritter, we get wrong outer plan from 
the cache. Then the error will be thrown as below:
   
   ```
   Caused by: java.lang.IllegalArgumentException: Stats for CTE: CTEId#1 not 
found
       at 
com.google.common.base.Preconditions.checkArgument(Preconditions.java:143) 
~[guava-32.1.2-jre.jar:?]
       at 
org.apache.doris.nereids.stats.StatsCalculator.visitLogicalCTEConsumer(StatsCalculator.java:1049)
 ~[classes/:?]
       at 
org.apache.doris.nereids.stats.StatsCalculator.visitLogicalCTEConsumer(StatsCalculator.java:147)
 ~[classes/:?]
       at 
org.apache.doris.nereids.trees.plans.logical.LogicalCTEConsumer.accept(LogicalCTEConsumer.java:111)
 ~[classes/:?]
       at 
org.apache.doris.nereids.stats.StatsCalculator.estimate(StatsCalculator.java:222)
 ~[classes/:?]
       at 
org.apache.doris.nereids.stats.StatsCalculator.estimate(StatsCalculator.java:200)
 ~[classes/:?]
       at 
org.apache.doris.nereids.jobs.cascades.DeriveStatsJob.execute(DeriveStatsJob.java:108)
 ~[classes/:?]
       at 
org.apache.doris.nereids.jobs.scheduler.SimpleJobScheduler.executeJobPool(SimpleJobScheduler.java:39)
 ~[classes/:?]
       at 
org.apache.doris.nereids.jobs.executor.Optimizer.execute(Optimizer.java:51) 
~[classes/:?]
       at 
org.apache.doris.nereids.jobs.rewrite.CostBasedRewriteJob.getCost(CostBasedRewriteJob.java:98)
 ~[classes/:?]
       at 
org.apache.doris.nereids.jobs.rewrite.CostBasedRewriteJob.execute(CostBasedRewriteJob.java:64)
 ~[classes/:?]
       at 
org.apache.doris.nereids.jobs.executor.AbstractBatchJobExecutor.execute(AbstractBatchJobExecutor.java:119)
 ~[classes/:?]
       at 
org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.visit(RewriteCteChildren.java:72)
 ~[classes/:?]
       at 
org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.visit(RewriteCteChildren.java:56)
 ~[classes/:?]
       at 
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor.visitLogicalSink(PlanVisitor.java:118)
 ~[classes/:?]
       at 
org.apache.doris.nereids.trees.plans.visitor.SinkVisitor.visitLogicalResultSink(SinkVisitor.java:72)
 ~[classes/:?]
       at 
org.apache.doris.nereids.trees.plans.logical.LogicalResultSink.accept(LogicalResultSink.java:58)
 ~[classes/:?]
       at 
org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.visitLogicalCTEAnchor(RewriteCteChildren.java:86)
 ~[classes/:?]
       at 
org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.visitLogicalCTEAnchor(RewriteCteChildren.java:56)
 ~[classes/:?]
       at 
org.apache.doris.nereids.trees.plans.logical.LogicalCTEAnchor.accept(LogicalCTEAnchor.java:60)
 ~[classes/:?]
       at 
org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.visitLogicalCTEAnchor(RewriteCteChildren.java:86)
 ~[classes/:?]
       at 
org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.visitLogicalCTEAnchor(RewriteCteChildren.java:56)
 ~[classes/:?]
       at 
org.apache.doris.nereids.trees.plans.logical.LogicalCTEAnchor.accept(LogicalCTEAnchor.java:60)
 ~[classes/:?]
       at 
org.apache.doris.nereids.rules.rewrite.RewriteCteChildren.rewriteRoot(RewriteCteChildren.java:67)
 ~[classes/:?]
       at 
org.apache.doris.nereids.jobs.rewrite.CustomRewriteJob.execute(CustomRewriteJob.java:58)
 ~[classes/:?]
       at 
org.apache.doris.nereids.jobs.executor.AbstractBatchJobExecutor.execute(AbstractBatchJobExecutor.java:119)
 ~[classes/:?]
       at 
org.apache.doris.nereids.NereidsPlanner.rewrite(NereidsPlanner.java:275) 
~[classes/:?]
       at org.apache.doris.nereids.NereidsPlanner.plan(NereidsPlanner.java:218) 
~[classes/:?]
       at org.apache.doris.nereids.NereidsPlanner.plan(NereidsPlanner.java:118) 
~[classes/:?]
       at 
org.apache.doris.nereids.trees.plans.commands.ExplainCommand.run(ExplainCommand.java:81)
 ~[classes/:?]
       at 
org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:550) 
~[classes/:?]
   ```
   
   ## Proposed changes
   
   Issue Number: close #xxx
   
   <!--Describe your changes.-->
   
   ## Further comments
   
   If this is a relatively large or complex change, kick off the discussion at 
[d...@doris.apache.org](mailto:d...@doris.apache.org) by explaining why you 
chose the solution you did and what alternatives you considered, etc...
   
   


-- 
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: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to