Fix empty array validity predicates - #9417
Conversation
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Merging this PR will regress 3 benchmarks
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | cold_misaligned[(64, 256)] |
4.4 ms | 5.3 ms | -16.82% |
| ❌ | Simulation | compact_sliced[(4096, 90)] |
1.6 µs | 1.9 µs | -13.97% |
| ❌ | Simulation | compact_sliced[(16384, 90)] |
1.8 µs | 2 µs | -13.01% |
| ⚡ | Simulation | take[small_m/shuffled/primitive/nonnull/chunks=1024/indices=1000] |
6.1 ms | 5.3 ms | +14.74% |
| ⚡ | Simulation | take[small_m/shuffled/primitive/nonnull/chunks=1024/indices=256] |
2.3 ms | 2 ms | +13.49% |
| ⚡ | Simulation | take[small_m/shuffled/primitive/nonnull/chunks=16384/indices=1000] |
10.2 ms | 9 ms | +12.72% |
| ⚡ | Simulation | take[small_m/shuffled/primitive/nonnull/chunks=16384/indices=256] |
3.3 ms | 3 ms | +10.01% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ct/mask-all-valid (47b4ab4) with develop (b363fb7)
Footnotes
-
89 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals Profiling 📖Vortex (geomean): 1.016x ➖ datafusion / vortex-file-compressed / ns (1.016x ➖, 0↑ 1↓)
No file size changes detected. |
Benchmarks: FineWeb NVMe 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.983x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.003x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.114x ❌, 2↑ 4↓)
duckdb / parquet / ns (0.999x ➖, 0↑ 0↓)
File Size Changes (2 files changed, -46.3% overall, 0↑ 2↓)
Totals:
|
Benchmarks: TPC-H SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.009x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.999x ➖, 2↑ 1↓)
duckdb / vortex-file-compressed / ns (1.004x ➖, 0↑ 1↓)
duckdb / parquet / ns (1.000x ➖, 0↑ 0↓)
File Size Changes (9 files changed, -43.9% overall, 0↑ 9↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.999x ➖, 2↑ 1↓)
datafusion / parquet / ns (1.003x ➖, 0↑ 5↓)
duckdb / vortex-file-compressed / ns (1.002x ➖, 1↑ 9↓)
duckdb / parquet / ns (1.001x ➖, 4↑ 4↓)
File Size Changes (25 files changed, -43.5% overall, 0↑ 25↓)
Totals:
|
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.879x ✅, 3↑ 1↓)
datafusion / parquet / ns (0.998x ➖, 1↑ 2↓)
duckdb / vortex-file-compressed / ns (1.010x ➖, 0↑ 3↓)
duckdb / parquet / ns (0.966x ➖, 1↑ 0↓)
File Size Changes (201 files changed, -42.8% overall, 44↑ 157↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.998x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.995x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.982x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.008x ➖, 0↑ 1↓)
File Size Changes (9 files changed, -44.0% overall, 0↑ 9↓)
Totals:
|
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.001x ➖, 1↑ 2↓)
datafusion / parquet / ns (0.985x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (0.984x ➖, 3↑ 2↓)
duckdb / parquet / ns (0.990x ➖, 1↑ 0↓)
File Size Changes (101 files changed, -39.2% overall, 0↑ 101↓)
Totals:
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed / ns (1.010x ➖, 2↑ 2↓)
duckdb / parquet / ns (1.006x ➖, 0↑ 0↓)
File Size Changes (2 files changed, -32.3% overall, 0↑ 2↓)
Totals:
|
Benchmarks: FineWeb S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.116x ➖, 0↑ 2↓)
datafusion / parquet / ns (1.099x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed / ns (1.027x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.002x ➖, 0↑ 0↓)
|
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.172x ➖, 0↑ 6↓)
datafusion / parquet / ns (1.067x ➖, 0↑ 3↓)
duckdb / vortex-file-compressed / ns (1.061x ➖, 0↑ 1↓)
duckdb / parquet / ns (1.070x ➖, 0↑ 0↓)
|
Rationale for this change
MaskedArray::try_newrejects an empty child with an all-true validity bitmap #9403ArrayRef::all_validtreated an empty bitmap's missingMinstatistic as evidence of a null, soMaskedArrayrejected an empty child based on its validity representation.What changes are included in this PR?
Empty arrays are now vacuously both all-valid and all-invalid.
Maskedvalidation now enforces the all-valid child invariant, and a regression covers the empty bitmap case.