apache / apache/paimon-cpp

Reuse Parquet OffsetIndex objects and direct-plan decisions

Open
#328 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
65
Forks
25
Avg merge
2d 12h
Merged PRs (30d)
80

Description

### 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.

Contributor guide

Open the contributing guide

Research direction

Start by checking issue #314, which is named as the implementation for this work. Validate selected values and index lifetimes across sparse and dense selections, including row-group retention limits, then compare the format benchmark with main for latency and storage bytes without assuming a general speedup.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
data-engineering, performance
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.