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

   pick from master:
   PR: #26326 
   commit id: 0f24500ff8484bcfd3b9760c0f20bb98a860b859
   
   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 
[[email protected]](mailto:[email protected]) 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: [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]

Reply via email to