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
- Disable the pushdown filter session/config property for Iceberg (e.g. the pushdown_filter_enabled flag) and re-run the query
- Verify the connector in use; pushdown-based filtering is only valid for the native connector path, not the Java connector
- 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
- Keep iceberg pushdown_filter_enabled=false when using the Java connector
- Audit session property templates for stale experimental flags
- Ensure planner extensions build layouts for the Java connector with pushdown disabled
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
- NOT_SUPPORTED
- ICEBERG_COMMIT_ERROR
- NOT_SUPPORTED
- iceberg.target-max-file-size must be at least 1 byte
- NOT_SUPPORTED
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/fd4ab6633dd261c4.
Report an issue: GitHub.