18
18
import com .facebook .presto .cost .CostComparator ;
19
19
import com .facebook .presto .cost .StatsCalculator ;
20
20
import com .facebook .presto .cost .TaskCountEstimator ;
21
+ import com .facebook .presto .execution .TaskManagerConfig ;
21
22
import com .facebook .presto .metadata .Metadata ;
22
23
import com .facebook .presto .split .PageSourceManager ;
23
24
import com .facebook .presto .split .SplitManager ;
27
28
import com .facebook .presto .sql .planner .iterative .IterativeOptimizer ;
28
29
import com .facebook .presto .sql .planner .iterative .Rule ;
29
30
import com .facebook .presto .sql .planner .iterative .properties .LogicalPropertiesProviderImpl ;
31
+ import com .facebook .presto .sql .planner .iterative .rule .AddExchangesBelowPartialAggregationOverGroupIdRuleSet ;
30
32
import com .facebook .presto .sql .planner .iterative .rule .AddIntermediateAggregations ;
31
33
import com .facebook .presto .sql .planner .iterative .rule .AddNotNullFiltersToJoinNode ;
32
34
import com .facebook .presto .sql .planner .iterative .rule .CombineApproxPercentileFunctions ;
@@ -223,7 +225,8 @@ public PlanOptimizers(
223
225
TaskCountEstimator taskCountEstimator ,
224
226
PartitioningProviderManager partitioningProviderManager ,
225
227
FeaturesConfig featuresConfig ,
226
- ExpressionOptimizerManager expressionOptimizerManager )
228
+ ExpressionOptimizerManager expressionOptimizerManager ,
229
+ TaskManagerConfig taskManagerConfig )
227
230
{
228
231
this (metadata ,
229
232
sqlParser ,
@@ -239,7 +242,8 @@ public PlanOptimizers(
239
242
taskCountEstimator ,
240
243
partitioningProviderManager ,
241
244
featuresConfig ,
242
- expressionOptimizerManager );
245
+ expressionOptimizerManager ,
246
+ taskManagerConfig );
243
247
}
244
248
245
249
@ PostConstruct
@@ -271,7 +275,8 @@ public PlanOptimizers(
271
275
TaskCountEstimator taskCountEstimator ,
272
276
PartitioningProviderManager partitioningProviderManager ,
273
277
FeaturesConfig featuresConfig ,
274
- ExpressionOptimizerManager expressionOptimizerManager )
278
+ ExpressionOptimizerManager expressionOptimizerManager ,
279
+ TaskManagerConfig taskManagerConfig )
275
280
{
276
281
this .exporter = exporter ;
277
282
ImmutableList .Builder <PlanOptimizer > builder = ImmutableList .builder ();
@@ -822,6 +827,7 @@ public PlanOptimizers(
822
827
823
828
if (!noExchange ) {
824
829
builder .add (new ReplicateSemiJoinInDelete ()); // Must run before AddExchanges
830
+
825
831
builder .add (new IterativeOptimizer (
826
832
metadata ,
827
833
ruleStats ,
@@ -832,6 +838,7 @@ public PlanOptimizers(
832
838
// Must run before AddExchanges and after ReplicateSemiJoinInDelete
833
839
// to avoid temporarily having an invalid plan
834
840
new DetermineSemiJoinDistributionType (costComparator , taskCountEstimator ))));
841
+
835
842
builder .add (new RandomizeNullKeyInOuterJoin (metadata .getFunctionAndTypeManager (), statsCalculator ),
836
843
new PruneUnreferencedOutputs (),
837
844
new IterativeOptimizer (
@@ -843,6 +850,7 @@ public PlanOptimizers(
843
850
new PruneRedundantProjectionAssignments (),
844
851
new InlineProjections (metadata .getFunctionAndTypeManager ()),
845
852
new RemoveRedundantIdentityProjections ())));
853
+
846
854
builder .add (new ShardJoins (metadata , metadata .getFunctionAndTypeManager (), statsCalculator ),
847
855
new PruneUnreferencedOutputs ());
848
856
builder .add (
@@ -916,6 +924,13 @@ public PlanOptimizers(
916
924
ImmutableSet .of (
917
925
new PruneJoinColumns ())));
918
926
927
+ builder .add (new IterativeOptimizer (
928
+ metadata ,
929
+ ruleStats ,
930
+ statsCalculator ,
931
+ costCalculator ,
932
+ new AddExchangesBelowPartialAggregationOverGroupIdRuleSet (taskCountEstimator , taskManagerConfig , metadata ).rules ()));
933
+
919
934
builder .add (new IterativeOptimizer (
920
935
metadata ,
921
936
ruleStats ,
0 commit comments