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

   when output meet order by not meet distribution. we use a trick way to do 
enforce by set current output to any. but when we do enforce later, we still 
use the old output. So when we do choose best plan, we could not find the older 
output's plan, since we have replace it by any. For example:
   
   ```
     lowest Plan(cost, properties, plan, childrenRequires)
   
       18.0 ANY
        id:138#4 cost=0 [0/0/0/] estRows=4 children=[@0 ] 
(plan=PhysicalWindow[139]@4 ( windowFrameGroup=(Funcs=[row_number() 
WindowSpec(PARTITION BY b#1, a#0 ROWS BETWEEN UNBOUNDED_PRECEDING AND 
CURRENT_ROW) AS `r1`#2], PartitionKeys=[b#1, a#0], OrderKeys=[], 
WindowFrame=WindowFrame(ROWS, UNBOUNDED_PRECEDING, CURRENT_ROW)), 
requiredProperties=[DistributionSpecHash ( orderedShuffledColumns=[1, 0], 
shuffleType=REQUIRE, tableId=-1, selectedIndexId=-1, partitionIds=[], 
equivalenceExprIds=[[1], [0]], exprIdToEquivalenceSet={0=1, 1=0} ) Order: ([b#1 
asc, a#0 asc])], stats=null ))
        [DistributionSpecHash ( orderedShuffledColumns=[0], 
shuffleType=NATURAL, tableId=3547296, selectedIndexId=3547297, 
partitionIds=[3547295], equivalenceExprIds=[[0]], exprIdToEquivalenceSet={0=0} 
) Order: ([b#1 asc, a#0 asc])]
   
       32.01171875 DistributionSpecHash ( orderedShuffledColumns=[1], 
shuffleType=REQUIRE, tableId=-1, selectedIndexId=-1, partitionIds=[], 
equivalenceExprIds=[[1]], exprIdToEquivalenceSet={1=0} ) Order: ([b#1 asc])
        id:161#4 cost=14 [4/4/4/] estRows=4 children=[@4 ] 
(plan=PhysicalQuickSort[162]@4 ( orderKeys=[b#1 asc], phase=LOCAL_SORT, 
stats=null ))
        [DistributionSpecHash ( orderedShuffledColumns=[0], 
shuffleType=NATURAL, tableId=3547296, selectedIndexId=3547297, 
partitionIds=[3547295], equivalenceExprIds=[[0]], exprIdToEquivalenceSet={0=0} 
) Order: ([b#1 asc, a#0 asc])]
   
       32.01171875 DistributionSpecHash ( orderedShuffledColumns=[1], 
shuffleType=EXECUTION_BUCKETED, tableId=-1, selectedIndexId=-1, 
partitionIds=[], equivalenceExprIds=[[1]], exprIdToEquivalenceSet={1=0} ) 
Order: ([b#1 asc])
        id:161#4 cost=14 [4/4/4/] estRows=4 children=[@4 ] 
(plan=PhysicalQuickSort[162]@4 ( orderKeys=[b#1 asc], phase=LOCAL_SORT, 
stats=null ))
        [DistributionSpecHash ( orderedShuffledColumns=[1], 
shuffleType=EXECUTION_BUCKETED, tableId=-1, selectedIndexId=-1, 
partitionIds=[], equivalenceExprIds=[[1]], exprIdToEquivalenceSet={1=0} ) 
Order: ([])]
   
       18.01171875 DistributionSpecHash ( orderedShuffledColumns=[1], 
shuffleType=EXECUTION_BUCKETED, tableId=-1, selectedIndexId=-1, 
partitionIds=[], equivalenceExprIds=[[1]], exprIdToEquivalenceSet={1=0} ) 
Order: ([])
        id:157#4 cost=0 [0/0/0/] estRows=4 children=[@4 ] 
(plan=PhysicalDistribute[158]@4 ( distributionSpec=DistributionSpecHash ( 
orderedShuffledColumns=[1], shuffleType=EXECUTION_BUCKETED, tableId=-1, 
selectedIndexId=-1, partitionIds=[], equivalenceExprIds=[[1]], 
exprIdToEquivalenceSet={1=0} ), stats=null ))
        [DistributionSpecHash ( orderedShuffledColumns=[0], 
shuffleType=NATURAL, tableId=3547296, selectedIndexId=3547297, 
partitionIds=[3547295], equivalenceExprIds=[[0]], exprIdToEquivalenceSet={0=0} 
) Order: ([b#1 asc, a#0 asc])]
   ```
   
   the last one require a natural shuffle type property from this group. but 
this property already been removed when we do
   enforceDistributionButMeetSort. So, such exception will be thrown
   
   ```
   Caused by: org.apache.doris.nereids.exceptions.AnalysisException: Failed to 
choose best plan
       at 
org.apache.doris.nereids.NereidsPlanner.chooseBestPlan(NereidsPlanner.java:340) 
~[classes/:?]
       at 
org.apache.doris.nereids.NereidsPlanner.chooseBestPlan(NereidsPlanner.java:323) 
~[classes/:?]
       ... 18 more
   Caused by: org.apache.doris.nereids.exceptions.AnalysisException: 
lowestCostPlans with physicalProperties(DistributionSpecHash ( 
orderedShuffledColumns=[0], shuffleType=NATURAL, tableId=3547296, 
selectedIndexId=3547297, partitionIds=[35
   47295], equivalenceExprIds=[[0]], exprIdToEquivalenceSet={0=0} ) Order: 
([b#1 asc, a#0 asc])) doesn't exist in root group
       at 
org.apache.doris.nereids.NereidsPlanner.lambda$chooseBestPlan$1(NereidsPlanner.java:318)
 ~[classes/:?]
       at java.util.Optional.orElseThrow(Optional.java:408) ~[?:?]
       at 
org.apache.doris.nereids.NereidsPlanner.chooseBestPlan(NereidsPlanner.java:317) 
~[classes/:?]
       at 
org.apache.doris.nereids.NereidsPlanner.chooseBestPlan(NereidsPlanner.java:323) 
~[classes/:?]
       ... 18 more
   ```
   


-- 
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