DuckDB chunk exporter - #8520
Conversation
Signed-off-by: "Nicholas Gates" <nick@nickgates.com>
9f2bc99 to
6bceb21
Compare
Merging this PR will not alter performance
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | chunked_varbinview_canonical_into[(1000, 10)] |
154.9 µs | 190.7 µs | -18.79% |
| ❌ | Simulation | decompress_rd[f64, (100000, 0.01)] |
843 µs | 1,021 µs | -17.43% |
| ❌ | Simulation | chunked_varbinview_into_canonical[(1000, 10)] |
170.1 µs | 205.8 µs | -17.35% |
| ⚡ | Simulation | take_10k_random |
254.3 µs | 196.5 µs | +29.4% |
| ⚡ | Simulation | take_10k_contiguous |
275.4 µs | 217.8 µs | +26.47% |
| ⚡ | Simulation | patched_take_10k_contiguous_patches |
289.3 µs | 230.7 µs | +25.4% |
| ⚡ | Simulation | patched_take_10k_random |
302 µs | 243.3 µs | +24.1% |
| ⚡ | Simulation | decompress_rd[f64, (100000, 0.1)] |
1,021.3 µs | 842.8 µs | +21.18% |
| ⚡ | Simulation | bitwise_not_vortex_buffer_mut[128] |
244.4 ns | 215.3 ns | +13.55% |
| ⚡ | Simulation | chunked_varbinview_opt_canonical_into[(100, 100)] |
339.4 µs | 304.5 µs | +11.47% |
| ⚡ | Simulation | bitwise_not_vortex_buffer_mut[1024] |
304.7 ns | 275.6 ns | +10.58% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ngates/duckdb-chunk-exporter (aca3105) with develop (5df0f94)
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals Profiling (base)Vortex (geomean): 0.905x ➖ How to read Verdict and Engines
datafusion / vortex-file-compressed (0.905x ➖, 3↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: FineWeb NVMe (base)Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.967x ➖, 2↑ 0↓)
datafusion / parquet (0.946x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.975x ➖, 0↑ 0↓)
duckdb / parquet (0.946x ➖, 2↑ 0↓)
File Size Changes (3 files changed, -46.3% overall, 0↑ 3↓)
Totals:
|
Benchmarks: TPC-H SF=1 on NVME (base)Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.988x ➖, 0↑ 0↓)
datafusion / parquet (0.995x ➖, 0↑ 1↓)
datafusion / arrow (0.996x ➖, 2↑ 2↓)
duckdb / vortex-file-compressed (0.988x ➖, 0↑ 0↓)
duckdb / parquet (1.012x ➖, 0↑ 1↓)
File Size Changes (19 files changed, -44.5% overall, 4↑ 15↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVME (base)Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.044x ➖, 1↑ 5↓)
datafusion / parquet (1.017x ➖, 2↑ 1↓)
duckdb / vortex-file-compressed (1.016x ➖, 1↑ 6↓)
duckdb / parquet (1.030x ➖, 0↑ 7↓)
File Size Changes (49 files changed, -43.5% overall, 3↑ 46↓)
Totals:
|
Benchmarks: FineWeb S3 (base)Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.954x ➖, 0↑ 1↓)
datafusion / parquet (0.954x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (0.987x ➖, 0↑ 0↓)
duckdb / parquet (0.968x ➖, 0↑ 0↓)
|
Benchmarks: Statistical and Population Genetics (base)Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed (0.998x ➖, 0↑ 0↓)
duckdb / parquet (0.995x ➖, 0↑ 0↓)
File Size Changes (3 files changed, -32.3% overall, 0↑ 3↓)
Totals:
|
Benchmarks: Clickbench on NVME (base)Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.995x ➖, 0↑ 0↓)
datafusion / parquet (0.998x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.980x ➖, 3↑ 0↓)
duckdb / parquet (1.000x ➖, 0↑ 1↓)
File Size Changes (201 files changed, -39.1% overall, 58↑ 143↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVME (base)Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.947x ➖, 0↑ 0↓)
datafusion / parquet (0.956x ➖, 0↑ 0↓)
datafusion / arrow (0.940x ➖, 4↑ 1↓)
duckdb / vortex-file-compressed (0.971x ➖, 0↑ 0↓)
duckdb / parquet (0.987x ➖, 0↑ 0↓)
File Size Changes (49 files changed, -44.5% overall, 9↑ 40↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3 (base)Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.914x ➖, 0↑ 0↓)
datafusion / parquet (0.980x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.915x ➖, 0↑ 0↓)
duckdb / parquet (0.912x ➖, 0↑ 0↓)
|
Signed-off-by: "Nicholas Gates" <nick@nickgates.com>
| for field in &self.fields { | ||
| chunk_len = field.preferred_batch_len(position, chunk_len); | ||
| } |
There was a problem hiding this comment.
there's a bit of inconsistent style where struct exporter does a fold and this does a loop
DuckDB vectors are allowed to be shorter than the standard vector size, so the Vortex exporter now lets column exporters cap the next output batch if they wish.
Chunked arrays use this hook to emit one DuckDB vector per inner chunk segment. I ran into a bad case this allowed preserving dictionary vectors for chunked dictionary arrays instead of the catastrophic case of flattening or remapping dictionaries across chunk boundaries.