Skip to content

Commit 2d4a0a8

Browse files
natashasehgalPresto CUDF CI
authored andcommitted
Implement visitMetadataDelete in Planner Optimizations (prestodb#25745)
Summary: Pull Request resolved: prestodb#25745 Early Metadata delete optimization from Metalake isn't working without proper support in Planner Optimization Failure E.g https://www.internalfb.com/intern/presto/query/?query_id=20250807_004822_04759_jyfv8#stack_trace - 2 partition + rand https://www.internalfb.com/intern/presto/query/?query_id=20250808_205037_00219_ykr22#sql - 1 partition + rand https://www.internalfb.com/intern/presto/query/?query_id=20250808_205410_00240_ykr22#sql - 1 partition + rand + between - https://www.internalfb.com/intern/presto/query/?query_id=20250808_205243_00239_ykr22#sql - 1 partition + between https://www.internalfb.com/intern/presto/query/?query_id=20250808_205610_00259_ykr22#sql Add handling logic for visit Metadata Delete Reference - https://www.internalfb.com/diff/D66677607 Reviewed By: ghelmling Differential Revision: D80040451
1 parent 924cdd8 commit 2d4a0a8

File tree

5 files changed

+40
-0
lines changed

5 files changed

+40
-0
lines changed

presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.facebook.presto.spi.plan.JoinNode;
3939
import com.facebook.presto.spi.plan.LimitNode;
4040
import com.facebook.presto.spi.plan.MarkDistinctNode;
41+
import com.facebook.presto.spi.plan.MetadataDeleteNode;
4142
import com.facebook.presto.spi.plan.OutputNode;
4243
import com.facebook.presto.spi.plan.Partitioning;
4344
import com.facebook.presto.spi.plan.PartitioningHandle;
@@ -732,6 +733,13 @@ public PlanWithProperties visitTableScan(TableScanNode node, PreferredProperties
732733
return planTableScan(node, TRUE_CONSTANT);
733734
}
734735

736+
@Override
737+
public PlanWithProperties visitMetadataDelete(MetadataDeleteNode node, PreferredProperties preferredProperties)
738+
{
739+
// MetadataDeleteNode is a leaf node that runs on coordinator
740+
return new PlanWithProperties(node);
741+
}
742+
735743
@Override
736744
public PlanWithProperties visitTableWriter(TableWriterNode node, PreferredProperties preferredProperties)
737745
{

presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.facebook.presto.spi.plan.LimitNode;
3535
import com.facebook.presto.spi.plan.MarkDistinctNode;
3636
import com.facebook.presto.spi.plan.MergeJoinNode;
37+
import com.facebook.presto.spi.plan.MetadataDeleteNode;
3738
import com.facebook.presto.spi.plan.OrderingScheme;
3839
import com.facebook.presto.spi.plan.OutputNode;
3940
import com.facebook.presto.spi.plan.PartitioningHandle;
@@ -391,6 +392,15 @@ public ActualProperties visitUpdate(UpdateNode node, List<ActualProperties> inpu
391392
return Iterables.getOnlyElement(inputProperties).translateVariable(symbol -> Optional.empty());
392393
}
393394

395+
@Override
396+
public ActualProperties visitMetadataDelete(MetadataDeleteNode node, List<ActualProperties> inputProperties)
397+
{
398+
// MetadataDeleteNode runs on coordinator and produces row count
399+
return ActualProperties.builder()
400+
.global(coordinatorSingleStreamPartition())
401+
.build();
402+
}
403+
394404
@Override
395405
public ActualProperties visitJoin(JoinNode node, List<ActualProperties> inputProperties)
396406
{

presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.facebook.presto.spi.plan.LimitNode;
2828
import com.facebook.presto.spi.plan.MarkDistinctNode;
2929
import com.facebook.presto.spi.plan.MergeJoinNode;
30+
import com.facebook.presto.spi.plan.MetadataDeleteNode;
3031
import com.facebook.presto.spi.plan.OutputNode;
3132
import com.facebook.presto.spi.plan.PlanNode;
3233
import com.facebook.presto.spi.plan.ProjectNode;
@@ -462,6 +463,13 @@ public StreamProperties visitUpdate(UpdateNode node, List<StreamProperties> inpu
462463
return properties.withUnspecifiedPartitioning();
463464
}
464465

466+
@Override
467+
public StreamProperties visitMetadataDelete(MetadataDeleteNode node, List<StreamProperties> inputProperties)
468+
{
469+
// MetadataDeleteNode runs on coordinator and outputs a single row count
470+
return StreamProperties.singleStream();
471+
}
472+
465473
@Override
466474
public StreamProperties visitTableWriteMerge(TableWriterMergeNode node, List<StreamProperties> inputProperties)
467475
{

presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.facebook.presto.spi.plan.JoinNode;
3535
import com.facebook.presto.spi.plan.LimitNode;
3636
import com.facebook.presto.spi.plan.MarkDistinctNode;
37+
import com.facebook.presto.spi.plan.MetadataDeleteNode;
3738
import com.facebook.presto.spi.plan.Ordering;
3839
import com.facebook.presto.spi.plan.OrderingScheme;
3940
import com.facebook.presto.spi.plan.OutputNode;
@@ -707,6 +708,13 @@ public PlanNode visitTableWriteMerge(TableWriterMergeNode node, RewriteContext<V
707708
return mapper.map(node, source);
708709
}
709710

711+
@Override
712+
public PlanNode visitMetadataDelete(MetadataDeleteNode node, RewriteContext<Void> context)
713+
{
714+
// MetadataDeleteNode has no symbols to unalias, so return unchanged
715+
return node;
716+
}
717+
710718
@Override
711719
public PlanNode visitPlan(PlanNode node, RewriteContext<Void> context)
712720
{

presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package com.facebook.presto.sql.planner.plan;
1515

16+
import com.facebook.presto.spi.plan.MetadataDeleteNode;
1617
import com.facebook.presto.spi.plan.PlanVisitor;
1718
import com.facebook.presto.sql.planner.CanonicalJoinNode;
1819
import com.facebook.presto.sql.planner.CanonicalTableScanNode;
@@ -126,4 +127,9 @@ public R visitSequence(SequenceNode node, C context)
126127
{
127128
return visitPlan(node, context);
128129
}
130+
131+
public R visitMetadataDelete(MetadataDeleteNode node, C context)
132+
{
133+
return visitPlan(node, context);
134+
}
129135
}

0 commit comments

Comments
 (0)