Systematic fuzz testing for parquet predicate pushdown
- Dominant language
- Rust
- Stars
- 9.3k
- Forks
- 2.4k
- Avg merge
- 3d 7h
- Merged PRs (30d)
- 344
Description
### Is your feature request related to a problem or challenge?
We have several forms of predicate pushdown in DataFusion's Parquet reader. The code path taken depends on the exact data layout and predicates defined
@itsjunetime is working on https://github.com/apache/datafusion/issues/4028 to improve performance by being more clever about some of these predicates.
The current code paths taken depend on
1. Row group size
2. Sort order of the data within the file
3. File repartitioning size (how many partitions are read)
4. Number of row groups
3. Datapage size
3. Use predicate pushdown?
3. Use predicate reordering?
### Describe the solution you'd like
I would like some additional test coverage (for correctness) when reading from parquet files with the various forms of pushdown enabled. It is especially important to ensure correctness with the various pushdowns enabled.
### Describe alternatives you've considered
I would like to have a test that
1. Creates multiple parquet files with different orderings / row group distribution etc
2. Runs the same query on the same input
3. Compares the results from the different queries and ensures it is the same
Parameters to check
1. Row group size
2. Sort order
3. Number of row groups
3. Datapage size
3. Use predicate pushdown
4. use predicate reordering
### Additional context
_No response_
Contributor guide
Research direction
Start by locating DataFusion's Parquet reader and the existing predicate pushdown test entry points. Define a test matrix covering row group size, sort order, file repartitioning, data page size, predicate pushdown, and predicate reordering; generate equivalent Parquet inputs and compare query results. Done means the relevant combinations have correctness coverage.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- data-engineering, testing
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100