feat: support bound expressions in partitioning - #9157
Conversation
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
4a55246 to
7124a9d
Compare
Merging this PR will improve performance by 12.06%
Performance Changes
Tip Curious why this is faster? Comment Comparing Footnotes
|
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: String Encoding 📖vortex / vortex-file-compressed / ms (1.002x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / % (1.000x ➖, 0↑ 0↓)
|
Benchmarks: PolarSignals Profiling 📖Vortex (geomean): 0.995x ➖ datafusion / vortex-file-compressed / ns (0.995x ➖, 0↑ 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 / ns (0.997x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (0.996x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.010x ➖, 1↑ 1↓)
duckdb / vortex-file-compressed / ns (1.015x ➖, 0↑ 2↓)
duckdb / vortex-compact / ns (0.990x ➖, 1↑ 0↓)
duckdb / parquet / ns (0.998x ➖, 0↑ 0↓)
duckdb / duckdb / ns (0.983x ➖, 0↑ 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 / ns (0.993x ➖, 1↑ 0↓)
datafusion / vortex-compact / ns (0.977x ➖, 1↑ 0↓)
datafusion / parquet / ns (1.006x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.990x ➖, 1↑ 1↓)
duckdb / vortex-compact / ns (0.983x ➖, 1↑ 0↓)
duckdb / parquet / ns (0.989x ➖, 0↑ 0↓)
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 / ns (1.001x ➖, 1↑ 3↓)
datafusion / vortex-compact / ns (1.002x ➖, 0↑ 2↓)
datafusion / parquet / ns (0.996x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (0.982x ➖, 7↑ 5↓)
duckdb / vortex-compact / ns (1.007x ➖, 1↑ 7↓)
duckdb / parquet / ns (1.013x ➖, 2↑ 8↓)
duckdb / duckdb / ns (1.015x ➖, 0↑ 10↓)
No file size changes detected. |
Benchmarks: Random Access 📖Vortex (geomean): 1.003x ➖ vortex / vortex-file-compressed / ns (1.003x ➖, 0↑ 0↓)
vortex / parquet / ns (1.012x ➖, 0↑ 0↓)
vortex / lance / ns (1.010x ➖, 0↑ 0↓)
|
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.959x ➖, 3↑ 2↓)
datafusion / parquet / ns (0.986x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.035x ➖, 0↑ 1↓)
duckdb / parquet / ns (0.971x ➖, 0↑ 0↓)
duckdb / duckdb / ns (1.007x ➖, 0↑ 0↓)
File Size Changes (200 files changed, +0.1% overall, 109↑ 91↓)
Totals:
|
Benchmarks: FineWeb S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.874x ➖, 1↑ 0↓)
datafusion / vortex-compact / ns (1.125x ➖, 0↑ 1↓)
datafusion / parquet / ns (0.969x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.989x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (0.951x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.201x ➖, 0↑ 1↓)
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed / ns (0.961x ➖, 2↑ 0↓)
duckdb / vortex-compact / ns (0.988x ➖, 3↑ 2↓)
duckdb / parquet / ns (0.989x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Appian on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.993x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.999x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.010x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.003x ➖, 0↑ 0↓)
duckdb / duckdb / ns (0.998x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.928x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (0.914x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.937x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.961x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (0.946x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.975x ➖, 0↑ 0↓)
|
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.990x ➖, 2↑ 0↓)
datafusion / parquet / ns (0.987x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (0.991x ➖, 3↑ 2↓)
duckdb / parquet / ns (0.998x ➖, 0↑ 0↓)
duckdb / duckdb / ns (1.008x ➖, 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 / ns (1.023x ➖, 0↑ 2↓)
datafusion / vortex-compact / ns (0.931x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.001x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed / ns (1.003x ➖, 0↑ 1↓)
duckdb / vortex-compact / ns (0.999x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.958x ➖, 0↑ 0↓)
|
Benchmarks: Vortex queries 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.004x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.999x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.976x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.999x ➖, 0↑ 0↓)
No file size changes detected. |
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.991x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (0.995x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.982x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.986x ➖, 1↑ 0↓)
duckdb / vortex-compact / ns (0.997x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.002x ➖, 0↑ 0↓)
duckdb / duckdb / ns (1.009x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Compression 📖vortex / vortex-file-compressed / ns (0.991x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / bytes (1.001x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / ratio (0.990x ➖, 0↑ 0↓)
vortex / parquet / ns (1.006x ➖, 0↑ 0↓)
vortex / parquet / bytes (1.000x ➖, 0↑ 0↓)
|
This is part of the migration to use `BoundExpression` thought vortex internals. #9120 ## Summary - carry bound projections and filters through scan plans and `LayoutReader` evaluation - use the bound partitioner from #9157 in struct, row-index, and dictionary readers - cache and reuse exact bound partition trees across row splits ## Break LayoutReader api not take a `BoundExpression` it should be easy to make one with `Expression::bind` --------- Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
This is done before using
BoundExpressionin layouts due a lock of partitioning causing a perf regressionSummary
BoundExpressionpartition_bound/partition_bound_annotationsand a bound partition resultExactBoundExprfor bound analysis maps so lazy schema dtypes are not structurally hashed