prestodb/presto · error · PrestoException

NOT_SUPPORTED

NOT_SUPPORTED

Error message

Filter Pushdown not supported for Iceberg Java Connector

What it means

IcebergPageSourceProvider.createPageSource throws NOT_SUPPORTED when the table layout has filter pushdown enabled (isPushdownFilterEnabled). The Java Iceberg connector does not support pushing filter evaluation down into the page source layer, so the request is rejected rather than silently ignoring the filter.

Source

Thrown at presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergPageSourceProvider.java:785

                            orcTypes.get(rootOrcType.getFieldTypeIndex(fieldId)).getAttributes()))
                    .collect(toImmutableList());
        }
        return columnAttributes;
    }

    @Override
    public ConnectorPageSource createPageSource(
            ConnectorTransactionHandle transaction,
            ConnectorSession session,
            ConnectorSplit connectorSplit,
            ConnectorTableLayoutHandle layout,
            List<ColumnHandle> desiredColumns,
            SplitContext splitContext,
            RuntimeStats runtimeStats)
    {
        IcebergTableLayoutHandle icebergLayout = (IcebergTableLayoutHandle) layout;
        if (icebergLayout.isPushdownFilterEnabled()) {
            throw new PrestoException(NOT_SUPPORTED, "Filter Pushdown not supported for Iceberg Java Connector");
        }

        IcebergSplit split = (IcebergSplit) connectorSplit;
        IcebergTableHandle table = icebergLayout.getTable();

        List<ColumnHandle> columns = desiredColumns;
        if (split.getChangelogSplitInfo().isPresent()) {
            columns = (List<ColumnHandle>) (List<?>) split.getChangelogSplitInfo().get().getIcebergColumns();
        }

        List<IcebergColumnHandle> icebergColumns = columns.stream()
                .map(IcebergColumnHandle.class::cast)
                .collect(toImmutableList());

        Optional<String> tableSchemaJson = table.getTableSchemaJson();
        verify(tableSchemaJson.isPresent(), "tableSchemaJson is null");
        Schema tableSchema = SchemaParser.fromJson(tableSchemaJson.get());
        PartitionSpec partitionSpec = PartitionSpecParser.fromJson(tableSchema, split.getPartitionSpecAsJson());

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Disable the pushdown filter session/config property for Iceberg (e.g. the pushdown_filter_enabled flag) and re-run the query
  2. Verify the connector in use; pushdown-based filtering is only valid for the native connector path, not the Java connector
  3. If this arises from custom planner code, build IcebergTableLayoutHandle with pushdown filter disabled

Example fix

// before
SET SESSION iceberg.pushdown_filter_enabled = true;
SELECT * FROM iceberg_table WHERE col > 10;
// after
SET SESSION iceberg.pushdown_filter_enabled = false;
SELECT * FROM iceberg_table WHERE col > 10;
Defensive patterns

Strategy: validation

Validate before calling

IcebergTableLayoutHandle layout = ...;
if (layout.isPushdownFilterEnabled()) {
    // fix configuration before calling createPageSource
    throw new IllegalArgumentException("Disable pushdown_filter for the Iceberg Java connector");
}

Prevention

When it happens

Trigger: Calling IcebergPageSourceProvider.createPageSource with an IcebergTableLayoutHandle whose isPushdownFilterEnabled() returns true — i.e. the query plan/session enabled pushdown-based filtering for the Iceberg Java connector.

Common situations: A session/config flag for pushdown filter mode was left enabled (e.g. experimental pushdown_filter_enabled) while running queries through the Java connector; a planner integration or custom plugin requests layouts built for the pushdown path.

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.

Related errors


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