Reuse Parquet OffsetIndex objects and direct-plan decisions
- Lenguaje dominante
- C++
- Estrellas
- 65
- Forks
- 25
- Merge medio
- 2 d 12 h
- PR fusionados (30 d)
- 80
Descripción
### Problem
Selective Parquet reads repeat CPU work within one file reader: Arrow 17 reparses OffsetIndex on each lookup, page planning scans page locations for sparse row selections, and decoding rebuilds a direct-read plan just to determine whether compressed row coordinates apply.
The byte cache in #272 reduces repeated I/O but does not eliminate this parsing and planning work.
### Proposed improvement
- Reuse parsed OffsetIndex objects within each retained row-group reader.
- Seek across page gaps for sparse selections and visit each selected page once.
- Reuse the direct-plan decision during decoding.
Preserve index validation, dictionary handling, per-leaf row coordinates and missing-index fallbacks. Keep parsed objects reader-local without introducing a shared data cache or public option.
### Validation
Check selected values and index lifetimes, including sparse/dense selections and the row-group retention limit. Compare against main with the format benchmark, reporting latency and storage bytes without assuming a general speedup.
Implementation: #314.
Guía de contribución
Línea de trabajo
Comienza revisando el issue #314, que se identifica como la implementación de este trabajo. Valida los valores seleccionados y los tiempos de vida de los índices en selecciones sparse y dense, incluidos los límites de retención de row-groups, y luego compara el format benchmark con main en cuanto a latencia y bytes de almacenamiento, sin asumir una mejora general de velocidad.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- cpp
- Área
- data-engineering, performance
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 25/100