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
{{ message }}
Repository navigation
Reuse Parquet OffsetIndex objects and direct-plan decisions #328
Arrow 17 deserializes OffsetIndex on every lookup, even when filesystem/index bytes are cached. Selective reads repeatedly request the same index during bitmap trimming, prebuffer planning and decoding. Rebuilding direct-read plans also repeats work.
Improvement
Offer reader-local parsed OffsetIndex caching through parquet.read.enable-offset-index-cache, disabled by default to avoid retained-memory growth for wide tables. Reuse the per-leaf direct-plan decision. Preserve page selection, validation and fallbacks.
Evidence
A local 100,000-row, one-column, 1-KiB-value benchmark with 6,250 pages reduced single-row read latency from 2.445 to 0.892 ms with equal bytes read. With 98 pages the improvement was 3.5%; full scans were unchanged. CPU samples confirm repeated OffsetIndex deserialization as the dominant cost. These results support selective many-page workloads, not a general wide-table speedup.
Implementation, reproduction and memory trade-offs: #314.
changed the title [-]Reduce repeated Parquet OffsetIndex parsing and page planning[/-][+]Reuse Parquet OffsetIndex objects and direct-plan decisions[/+]on Sep 16, 2026
Activity
[-]Reduce repeated Parquet OffsetIndex parsing and page planning[/-][+]Reuse Parquet OffsetIndex objects and direct-plan decisions[/+]