Lazily untranspose DeltaArray validity take #2#8890
Conversation
The reapplied lazy Delta validity (#8725) broke in two ways once arrays went through slicing or a file round-trip: - Delta::validity required the deltas' storage validity to be a raw Bool array, but Validity::Array may be lazily encoded (e.g. a vortex.slice wrapper when the validity encoding has no static slice reduction, or a re-encoded array after a file round-trip), failing with "DeltaArray storage validity must be a BoolArray, got vortex.slice". TransposedBool now wraps the validity as a child array of any encoding and canonicalizes it at execution time, where an ExecutionCtx is available. - untranspose_bitbuffer asserted 8-byte alignment, panicking with "Transposed buffer must be 8 byte aligned" on buffers viewed at arbitrary byte offsets (e.g. file segments). The transpose routines now normalize sliced views to chunk-aligned bytes and fall back to a copy path with unaligned-safe loads, keeping the in-place fast path for uniquely-owned aligned buffers. This also fixes bit-offset views being untransposed from the wrong chunk boundaries. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Robert Kruszewski <github@robertk.io>
|
This fixes the cases where the validity has been transformed. Need to investigate more how the misalignment happens |
Polar Signals Profiling ResultsLatest Run
Previous Runs (1)
Powered by Polar Signals Cloud |
Benchmarks: Vortex queries 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.077x ➖, 0↑ 1↓)
datafusion / parquet (1.027x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.067x ➖, 0↑ 0↓)
duckdb / parquet (1.011x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: PolarSignals Profiling 📖Vortex (geomean): 1.000x ➖ How to read Verdict and Engines
datafusion / vortex-file-compressed (1.000x ➖, 1↑ 0↓)
No file size changes detected. |
Benchmarks: FineWeb NVMe 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.809x ✅, 8↑ 0↓)
datafusion / vortex-compact (0.855x ✅, 9↑ 0↓)
datafusion / parquet (0.833x ✅, 9↑ 0↓)
duckdb / vortex-file-compressed (0.807x ✅, 9↑ 0↓)
duckdb / vortex-compact (0.847x ✅, 9↑ 0↓)
duckdb / parquet (0.882x ✅, 8↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.997x ➖, 0↑ 1↓)
datafusion / vortex-compact (1.047x ➖, 1↑ 5↓)
datafusion / parquet (1.097x ➖, 0↑ 9↓)
datafusion / arrow (1.014x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (0.997x ➖, 0↑ 1↓)
duckdb / vortex-compact (1.028x ➖, 0↑ 1↓)
duckdb / parquet (0.978x ➖, 1↑ 0↓)
duckdb / duckdb (1.036x ➖, 0↑ 2↓)
No file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.120x ❌, 0↑ 63↓)
datafusion / vortex-compact (1.095x ➖, 0↑ 43↓)
datafusion / parquet (1.121x ❌, 0↑ 65↓)
duckdb / vortex-file-compressed (1.095x ➖, 0↑ 44↓)
duckdb / vortex-compact (1.014x ➖, 0↑ 2↓)
duckdb / parquet (1.058x ➖, 0↑ 10↓)
duckdb / duckdb (1.008x ➖, 1↑ 2↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.931x ➖, 3↑ 1↓)
datafusion / vortex-compact (0.970x ➖, 0↑ 0↓)
datafusion / parquet (0.973x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.023x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.981x ➖, 0↑ 0↓)
duckdb / parquet (1.023x ➖, 0↑ 0↓)
|
Benchmarks: FineWeb S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.094x ➖, 0↑ 2↓)
datafusion / vortex-compact (0.906x ➖, 0↑ 0↓)
datafusion / parquet (1.051x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (0.981x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.983x ➖, 0↑ 0↓)
duckdb / parquet (1.000x ➖, 0↑ 0↓)
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed (1.041x ➖, 0↑ 1↓)
duckdb / vortex-compact (1.047x ➖, 0↑ 2↓)
duckdb / parquet (1.016x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.037x ➖, 1↑ 2↓)
datafusion / parquet (0.975x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.892x ✅, 5↑ 0↓)
duckdb / parquet (0.882x ✅, 7↑ 0↓)
duckdb / duckdb (0.936x ➖, 1↑ 0↓)
File Size Changes (201 files changed, -0.0% overall, 96↑ 105↓)
Totals:
|
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.008x ➖, 0↑ 2↓)
datafusion / parquet (0.992x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.003x ➖, 1↑ 2↓)
duckdb / parquet (0.993x ➖, 0↑ 0↓)
duckdb / duckdb (1.003x ➖, 1↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.929x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.958x ➖, 0↑ 0↓)
datafusion / parquet (0.898x ✅, 11↑ 0↓)
datafusion / arrow (0.857x ✅, 15↑ 0↓)
duckdb / vortex-file-compressed (1.000x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.999x ➖, 0↑ 0↓)
duckdb / parquet (0.997x ➖, 0↑ 0↓)
duckdb / duckdb (1.003x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Random Access 📖Vortex (geomean): 1.017x ➖ How to read Verdict and Engines
unknown / unknown (1.003x ➖, 2↑ 1↓)
|
Benchmarks: Appian on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.995x ➖, 0↑ 0↓)
datafusion / parquet (0.996x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (0.983x ➖, 0↑ 0↓)
duckdb / parquet (0.995x ➖, 0↑ 0↓)
duckdb / duckdb (0.973x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=10 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.031x ➖, 1↑ 2↓)
datafusion / vortex-compact (1.011x ➖, 0↑ 0↓)
datafusion / parquet (1.012x ➖, 1↑ 1↓)
duckdb / vortex-file-compressed (0.998x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.983x ➖, 0↑ 0↓)
duckdb / parquet (1.005x ➖, 0↑ 0↓)
|
Benchmarks: Compression 📖Vortex (geomean): 0.996x ➖ How to read Verdict and Engines
unknown / unknown (0.990x ➖, 3↑ 1↓)
|
|
we really should fix this s3 benchmarks |
|
I think #8903 will make it better |
Lazily untranpose DeltaArray validity array