Skip to content

feat: support for pushing static filters into Iceberg scans - #106

Draft
Perseus wants to merge 2 commits into
apache:mainfrom
Perseus:anirudh.singh/physical-predicate-converter
Draft

Perseus wants to merge 2 commits into
apache:mainfrom
Perseus:anirudh.singh/physical-predicate-converter

Conversation

@Perseus

@Perseus Perseus commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Adds iceberg_datafusion::read::convert_physical_filter_to_predicate, which turns a DataFusion physical filter into an Iceberg predicate. IcebergDataSource uses it for the filters DataFusion pushes into the scan.

The data source:

  • keeps the filters it gets through try_pushdown_filters, and reports each as not pushed down, so DataFusion still applies it
  • converts them when the scan opens and ANDs the result onto its predicate
  • returns them from IcebergDataSource::filters

This is a first step toward #68.

Add a public function that turns a DataFusion physical filter into an
Iceberg predicate. The predicate matches every row the filter matches.
It can match more rows, so callers still apply the filter.

The function returns None when no part of the filter converts. It is
exported as iceberg_datafusion::read::convert_physical_filter_to_predicate.
IcebergDataSource now accepts physical filters through
try_pushdown_filters. It reports each one as not pushed down, so
DataFusion still applies it. When the scan opens, it converts the
filters with convert_physical_filter_to_predicate and ANDs them onto
its predicate.

The filters are available through IcebergDataSource::filters.
@Perseus Perseus changed the title feat: support for pushing physical expressions into Iceberg scans feat: support for pushing static filters into Iceberg scans Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant