Class ParquetFilterPushdownSupport

java.lang.Object
org.elasticsearch.xpack.esql.datasource.parquet.ParquetFilterPushdownSupport
All Implemented Interfaces:
FilterPushdownSupport

public class ParquetFilterPushdownSupport extends Object implements FilterPushdownSupport
Parquet-specific filter pushdown support that validates ESQL filter expressions for pushdown eligibility and collects them into a ParquetPushedExpressions wrapper for deferred translation at read time.

Translation to Parquet FilterPredicate is deferred because DATETIME columns can have different physical representations across files (INT32 DATE, INT64 TIMESTAMP_MILLIS/MICROS/NANOS, INT96). The actual file schema is needed for correct value conversion.

When set on ParquetReadOptions, parquet-java automatically applies four levels of filtering:

  1. Statistics (min/max) — skips row groups where value is outside range
  2. Dictionary — skips row groups where dictionary-encoded column doesn't contain value
  3. Bloom filter — skips row groups where bloom filter says value definitely absent
  4. Page index (ColumnIndex/OffsetIndex) — skips individual pages within row groups using per-page min/max statistics (active by default via useColumnIndexFilter=true since parquet-mr 1.12.0)

All pushed filters use FilterPushdownSupport.Pushability.RECHECK semantics: the original filter remains in FilterExec for per-row correctness since predicate pushdown is a conservative approximation.