Goal
Adaptive Query Execution (AQE) is currently EXPERIMENTAL and disabled by default. This epic tracks the correctness, fault-tolerance, performance, and feature work required to make the adaptive planner the default execution path and eventually remove the experimental warning.
The design and initial implementation of the adaptive planner are tracked in the design epic #1359. This epic is the "graduation" checklist: the remaining work to flip the default from off to on.
Current state
AQE is gated behind these configuration flags, all off by default:
ballista.planner.adaptive.enabled — master switch (AdaptiveExecutionGraph / AdaptivePlanner)
ballista.planner.coalesce.enabled — coalesce shuffle partitions rule
ballista.planner.propagate_empty.enabled — propagate-empty rule
ballista.planner.adaptive_join.enabled — dynamic join selection (SelectJoinRule / DynamicJoinSelectionExec)
The scheduler emits "Adaptive Query Planning is EXPERIMENTAL, should be used for testing purposes only!" when the master switch is on.
Exit criteria
Before flipping the default we want:
- No AQE-specific correctness failures on the TPC-H and TPC-DS suites at scale.
- AQE on is at least as fast as AQE off across the benchmark suites (no regressions).
- The adaptive path has the same fault-tolerance guarantees as the static path (executor loss, shuffle-fetch retry, stage/task retry).
- The adaptive feature set (coalesce, propagate-empty, dynamic join selection, runtime join/aggregate switching) is complete and enabled.
- Operational parity with the static planner (intermediate-shuffle reclaim, stats plumbing).
Blocking issues
Correctness (AQE-specific)
Fault tolerance / high availability
Planning quality / performance regressions
Statistics plumbing
Feature completeness
Operational
Already resolved
For context, these AQE blockers are already fixed:
Related
Goal
Adaptive Query Execution (AQE) is currently EXPERIMENTAL and disabled by default. This epic tracks the correctness, fault-tolerance, performance, and feature work required to make the adaptive planner the default execution path and eventually remove the experimental warning.
The design and initial implementation of the adaptive planner are tracked in the design epic #1359. This epic is the "graduation" checklist: the remaining work to flip the default from off to on.
Current state
AQE is gated behind these configuration flags, all off by default:
ballista.planner.adaptive.enabled— master switch (AdaptiveExecutionGraph/AdaptivePlanner)ballista.planner.coalesce.enabled— coalesce shuffle partitions ruleballista.planner.propagate_empty.enabled— propagate-empty ruleballista.planner.adaptive_join.enabled— dynamic join selection (SelectJoinRule/DynamicJoinSelectionExec)The scheduler emits
"Adaptive Query Planning is EXPERIMENTAL, should be used for testing purposes only!"when the master switch is on.Exit criteria
Before flipping the default we want:
Blocking issues
Correctness (AQE-specific)
OffsetOverflowError(2147731589)(AQE) #1826 — TPC-DS Q72 fails withOffsetOverflowError(AQE)Fault tolerance / high availability
DataFusionError::SharedPlanning quality / performance regressions
total_byte_sizeis unknowntarget_partitionsStatistics plumbing
ShuffleReaderExecFeature completeness
Operational
Already resolved
For context, these AQE blockers are already fixed:
EmptyExec invalid partitionon many TPC-DS queries #2047 — Adaptive execution panics withEmptyExec invalid partitionon many TPC-DS queriesballista.optimizer.broadcast_join_threshold_byteshas no effect when adaptive query planning is enabled #2085 —ballista.optimizer.broadcast_join_threshold_byteshas no effect when adaptive planning is enabledRelated