Port OnPair to onpair 0.1.0; add compressed-domain LIKE, list_contains, and take kernels#8675
Port OnPair to onpair 0.1.0; add compressed-domain LIKE, list_contains, and take kernels#8675gargiulofrancesco wants to merge 1 commit into
Conversation
Merging this PR will not alter performance
Comparing Footnotes
|
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals ProfilingVortex (geomean): 1.019x ➖ How to read Verdict and Engines
datafusion / vortex-file-compressed (1.019x ➖, 1↑ 1↓)
File Size Changes (1 files changed, +0.0% overall, 1↑ 0↓)
Totals:
|
Benchmarks: FineWeb NVMeVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.063x ➖, 0↑ 3↓)
datafusion / parquet (0.995x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (0.976x ➖, 3↑ 2↓)
duckdb / parquet (0.992x ➖, 0↑ 0↓)
File Size Changes (3 files changed, -46.2% overall, 1↑ 2↓)
Totals:
|
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.049x ➖, 0↑ 0↓)
datafusion / parquet (1.068x ➖, 0↑ 3↓)
datafusion / arrow (1.074x ➖, 0↑ 7↓)
duckdb / vortex-file-compressed (1.042x ➖, 0↑ 0↓)
duckdb / parquet (1.029x ➖, 1↑ 3↓)
File Size Changes (17 files changed, -43.3% overall, 5↑ 12↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.064x ➖, 1↑ 13↓)
datafusion / parquet (1.066x ➖, 1↑ 16↓)
duckdb / vortex-file-compressed (1.060x ➖, 0↑ 18↓)
duckdb / parquet (1.039x ➖, 0↑ 5↓)
File Size Changes (42 files changed, -43.5% overall, 15↑ 27↓)
Totals:
|
Benchmarks: FineWeb S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.927x ➖, 0↑ 0↓)
datafusion / parquet (1.001x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (1.007x ➖, 0↑ 1↓)
duckdb / parquet (1.009x ➖, 0↑ 0↓)
|
Benchmarks: Clickbench Sorted on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.057x ➖, 0↑ 2↓)
datafusion / parquet (1.051x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed (1.029x ➖, 2↑ 3↓)
duckdb / parquet (1.037x ➖, 0↑ 1↓)
File Size Changes (201 files changed, -42.2% overall, 91↑ 110↓)
Totals:
|
Benchmarks: Statistical and Population GeneticsVerdict: No clear signal (medium confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed (1.012x ➖, 0↑ 1↓)
duckdb / parquet (1.099x ➖, 0↑ 5↓)
File Size Changes (3 files changed, -32.3% overall, 1↑ 2↓)
Totals:
|
Benchmarks: Clickbench on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.983x ➖, 3↑ 2↓)
datafusion / parquet (0.960x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.931x ➖, 7↑ 0↓)
duckdb / parquet (0.996x ➖, 0↑ 0↓)
File Size Changes (201 files changed, -38.6% overall, 99↑ 102↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.014x ➖, 1↑ 5↓)
datafusion / parquet (0.934x ➖, 4↑ 0↓)
datafusion / arrow (0.898x ✅, 14↑ 0↓)
duckdb / vortex-file-compressed (0.928x ➖, 4↑ 0↓)
duckdb / parquet (1.005x ➖, 0↑ 0↓)
File Size Changes (47 files changed, -43.4% overall, 20↑ 27↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.044x ➖, 0↑ 2↓)
datafusion / parquet (1.072x ➖, 3↑ 4↓)
duckdb / vortex-file-compressed (1.051x ➖, 0↑ 0↓)
duckdb / parquet (1.013x ➖, 0↑ 0↓)
|
| // SAFETY: `out_bytes` has capacity for `total_size + DECODE_PADDING`, and | ||
| // `total_size` is the decoded length from Vortex's uncompressed_lengths | ||
| // child. |
There was a problem hiding this comment.
can we trust uncompressed_lengths?
There was a problem hiding this comment.
Swapped the decode to the safe try_decode_into + a length cross-check, so uncompressed_lengths is no longer trusted for sizing
…s, and take kernels - Port the onpair encoding to the onpair 0.1.0 public API (raw column parts, validated dictionaries, MaxDictBits config). - Add compressed-domain LIKE pushdown backed by onpair prefix/substring search, plus list_contains and take compute kernels. - Depend on the published onpair 0.1.0 release from crates.io. Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
aa08044 to
2c0f151
Compare
Rationale for this change
onpair 0.1.0 (spiraldb/onpair#20) refactors the library into modules and adds compressed-domain search (equality, prefix, substring). This PR ports the OnPair encoding to the new API and uses the search entry points to evaluate
LIKEdirectly on compressed data instead of canonicalizing first.Note
Draft: onpair 0.1.0 is not yet published to crates.io, so the dependency is temporarily a git dependency pinned to the 0.1.0 merge commit (
spiraldb/onpair@a31dfd5). It will be switched to the crates.io release before this PR is marked ready for review. The immediate goal is to run the SQL benchmarks and measure the impact of LIKE pushdown.What changes are included in this PR?
vortex-onpairand the btrblocks OnPair string scheme to the onpair 0.1.0 API (raw column parts, validatedCompactDictionaryView,MaxDictBitsconfig).like(equality/prefix/substring patterns, backed by onpair's compressed-domain search),list_contains, andtake.Cargo.toml/Cargo.lock: onpair 0.0.4 → 0.1.0 (temporary git pin, see note above).Checks run locally:
cargo nextest run -p vortex-onpair(43 tests passing),cargo check -p vortex-onpair -p vortex-btrblocks,cargo +nightly fmt --all, and clippy — all clean.What APIs are changed? Are there any user-facing changes?
No public Vortex API changes. Behavior change:
LIKE,list_contains, andtakeon OnPair-encoded arrays are now evaluated in the compressed domain instead of falling back to canonicalization.