Reuse Parquet OffsetIndex objects and direct-plan decisions
- 主要言語
- C++
- スター
- 65
- フォーク
- 25
- 平均マージ
- 2日 12時間
- マージ済み PR(30日)
- 80
説明
### 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.
コントリビューションガイド
調査の方向性
まず、この作業の実装として指定されている issue #314 を確認します。sparse と dense の選択全体で、選択された値とインデックスの存続期間を検証します。これには row-group の保持上限も含めます。その後、一般的な高速化を前提とせず、レイテンシーとストレージバイト数について format benchmark と main を比較します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- cpp
- 領域
- data-engineering, performance
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 25/100