prestodb/presto · error · PrestoException

NOT_SUPPORTED

NOT_SUPPORTED

Error message

Dynamic filtering cannot be used with grouped execution

What it means

Planning error: the plan enables dynamic filtering on a join that is also planned for grouped execution. These two features are mutually exclusive — dynamic filters are consumed while the build side streams, while grouped execution batches build-side data — so the planner rejects the combination rather than producing wrong results.

Source

Thrown at presto-main-base/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java:2614

                    context.getNextOperatorId(),
                    planNodeId,
                    dynamicFilter.getTupleDomainConsumer(),
                    filterBuildChannels,
                    getDynamicFilteringMaxPerDriverRowCount(context.getSession()),
                    getDynamicFilteringMaxPerDriverSize(context.getSession()),
                    getDynamicFilteringRangeRowLimitPerDriver(context.getSession()));
        }

        private Optional<LocalDynamicFilter> createDynamicFilter(PhysicalOperation buildSource, AbstractJoinNode node, LocalExecutionPlanContext context, int partitionCount)
        {
            if (!isEnableDynamicFiltering(context.getSession())) {
                return Optional.empty();
            }
            if (node.getDynamicFilters().isEmpty()) {
                return Optional.empty();
            }
            if (buildSource.getPipelineExecutionStrategy() == GROUPED_EXECUTION) {
                throw new PrestoException(NOT_SUPPORTED, "Dynamic filtering cannot be used with grouped execution");
            }
            LocalDynamicFiltersCollector collector = context.getDynamicFiltersCollector();
            return LocalDynamicFilter
                    .create(node, partitionCount)
                    .map(filter -> {
                        // Intersect dynamic filters' predicates when they become ready,
                        // in order to support multiple join nodes in the same plan fragment.
                        addSuccessCallback(filter.getResultFuture(), collector::intersect);
                        return filter;
                    });
        }

        private JoinFilterFunctionFactory compileJoinFilterFunction(
                SqlFunctionProperties sqlFunctionProperties,
                Map<SqlFunctionId, SqlInvokedFunction> sessionFunctions,
                RowExpression filterExpression,
                Map<VariableReferenceExpression, Integer> probeLayout,
                Map<VariableReferenceExpression, Integer> buildLayout)

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Disable dynamic filtering for the query: SET SESSION enable_dynamic_filtering = false
  2. Avoid grouped execution patterns (e.g. drop the compaction-style join shape or disable grouped execution via session properties)
  3. Repartition/reorder the join so grouped execution is not chosen
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java:2614 when the library encounters an invalid state.

Common situations: See trigger scenarios.

Understand the failure class

Background: Presto NOT_SUPPORTED error: what "not supported" means and how to fix it — this error's family across 3 libraries.


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/a94983b32a220506. Report an issue: GitHub.