You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Nested-leaf predicates in the Arrow reader are rejected even when the predicate targets a primitive leaf inside a struct.
For example, a predicate like:
nested.value=20
fails during row-filter construction because PredicateConverter::bound_reference resolves the predicate field ID to a Parquet leaf column, then rejects it when the Parquet column root is a group/struct.
The fix resolves a predicate's field to its Parquet column path (root to leaf) rather than a single leaf index, and walks that path through the projected RecordBatch, descending struct children by name to reach the primitive leaf, so person.age > 25 builds a row filter instead of erroring on the group root.
Scope note: this covers top-level and struct-nested leaves. Fields inside a list or map get no accessor in Schema::build_accessors, so a predicate on one already fails at bind time and never reaches the row filter, no change needed there. Row-group and page-index pruning resolve nested leaves by field id and didn't error on this path, so I left them out; happy to look at them separately if it's worth tightening.
Activity
LuciferYang commentedon Jul 27, 2026
I hit this and opened #2906 for it.
The fix resolves a predicate's field to its Parquet column path (root to leaf) rather than a single leaf index, and walks that path through the projected
RecordBatch, descending struct children by name to reach the primitive leaf, soperson.age > 25builds a row filter instead of erroring on the group root.Scope note: this covers top-level and struct-nested leaves. Fields inside a list or map get no accessor in
Schema::build_accessors, so a predicate on one already fails at bind time and never reaches the row filter, no change needed there. Row-group and page-index pruning resolve nested leaves by field id and didn't error on this path, so I left them out; happy to look at them separately if it's worth tightening.