This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-11376-c7f60c612bd16ca5485cc9acddfd216c10ea9765 in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
commit 36a71842b85f7d09e09a49cb7715ab73dcaa2f6d Author: Neil Conway <[email protected]> AuthorDate: Wed Oct 7 19:07:13 2026 +0000 perf(parquet): Skip per-level validity pass for list children with no nulls (#11376) # Which issue does this PR close? - N/A # Rationale for this change Since #9848, reading the child column of a list builds a compact validity bitmap with a pass over every definition level. When every definition level in a chunk has the maximum value (i.e., there are no null lists, empty lists, or null elements in any list), we can skip doing the pass over the definition levels and append an all-valid run instead. Adding this pass caused a regression in list decoding performance between 58.3.0 and 59.1.0: for example, 232 ms -> 289 ms to read 5M rows with 62.5M values on an Apple M4 Max. Benchmark for this case was added in #11375. Results on M4 Max: - StringList/no NULLs: +0.7%, −0.6%, +0.9% - StringList/half NULLs: +2.8%, +3.8%, +1.0% - StringList/90pct NULLs: +2.7%, +0.5%, +0.9% - StringList/99pct NULLs: +1.0%, +0.2%, +0.7% - Int32List/no NULLs: +0.8%, −0.3%, −0.2% - Int32List/half NULLs: +1.3%, −0.3%, +0.5% - Int32List/90pct NULLs: +0.6%, −0.9%, −0.3% - Int32List/99pct NULLs: +1.1%, −0.6%, +1.0% - Int32List/no NULLs or empty lists: −18.4%, −19.9%, −18.5% - Fixed32List/no NULLs: +1.2%, −0.8%, +1.1% - Fixed32List/half NULLs: +1.6%, +0.8%, +2.1% - Fixed32List/90pct NULLs: +0.4%, −0.5%, −0.5% - Fixed32List/99pct NULLs: +0.2%, +0.4%, +0.9% # What changes are included in this PR? See above. # Are these changes tested? Covered by existing tests. # Are there any significant user-facing changes? No. # AI usage Developed and revised with Claude Code (Opus 5.5).
