Skip to content

Conversation

@0ax1
Copy link
Contributor

@0ax1 0ax1 commented Jun 22, 2025

Replaces duckdb-rs query result handling with custom marshaling via DuckDB C API. This change removes the dependency on duckdb-rs and provides more fine-grained control over querying and result processing.

Changes:

  • Add QueryResult wrapper for C API marshaling
  • Replace Connection::execute*() methods with query() returning QueryResult
  • Implement result extraction via TryFrom
  • Remove duckdb-rs fork dependency
  • Update tests to use new interface

@0ax1 0ax1 requested a review from joseph-isaacs June 22, 2025 16:21
@0ax1 0ax1 added feature Release label indicating a new feature or request chore Release label indicating a trivial change and removed feature Release label indicating a new feature or request labels Jun 22, 2025
@0ax1 0ax1 force-pushed the ad/expand-ddb-connection-wrapper branch from 284b2e2 to 9da8a98 Compare June 22, 2025 16:23
@joseph-isaacs joseph-isaacs added the benchmark Run benchmarks on this branch label Jun 22, 2025
@github-actions github-actions bot removed the benchmark Run benchmarks on this branch label Jun 22, 2025
@joseph-isaacs
Copy link
Contributor

Mind adding an description explaining the motivation of this change.

@joseph-isaacs
Copy link
Contributor

joseph-isaacs commented Jun 22, 2025

I wonder if this has much overhead compared to the arrow exporter, maybe marshalling can be done after timing the run?

@github-actions
Copy link
Contributor

Benchmarks: random_access

Table of Results
name PR 22e028c base 2f658ec ratio (PR/base) unit
random-access/vortex-tokio-local-disk 2630401 2.56346e+06 1.02611 ns
random-access/parquet-tokio-local-disk 189239085 1.87048e+08 1.01171 ns

@github-actions
Copy link
Contributor

Benchmarks: TPC-H on NVME

Table of Results
name PR 22e028c base 2f658ec ratio (PR/base) unit
tpch_q01/DataFusion:arrow 63145414 6.23044e+07 1.0135 ns
tpch_q02/DataFusion:arrow 19761510 2.0782e+07 0.950895 ns
tpch_q03/DataFusion:arrow 24108040 2.43472e+07 0.990177 ns
tpch_q04/DataFusion:arrow 19348695 1.96693e+07 0.983702 ns
tpch_q05/DataFusion:arrow 33102873 3.34257e+07 0.990343 ns
tpch_q06/DataFusion:arrow 7763130 8.07517e+06 0.961358 ns
tpch_q07/DataFusion:arrow 54612682 5.69991e+07 0.958132 ns
tpch_q08/DataFusion:arrow 19123674 2.02815e+07 0.942913 ns
tpch_q09/DataFusion:arrow 34784329 3.63146e+07 0.957861 ns
tpch_q10/DataFusion:arrow 32821813 3.28761e+07 0.998348 ns
tpch_q11/DataFusion:arrow 8283462 8.55564e+06 0.968188 ns
tpch_q12/DataFusion:arrow 23225418 2.38948e+07 0.971986 ns
tpch_q13/DataFusion:arrow 15294886 1.52515e+07 1.00285 ns
tpch_q14/DataFusion:arrow 8011672 8.19233e+06 0.977948 ns
tpch_q15/DataFusion:arrow 15441476 1.5511e+07 0.995519 ns
tpch_q16/DataFusion:arrow 17621425 1.80891e+07 0.974146 ns
tpch_q17/DataFusion:arrow 49620121 5.00885e+07 0.990649 ns
tpch_q18/DataFusion:arrow 109821614 1.13594e+08 0.966791 ns
tpch_q19/DataFusion:arrow 17264191 1.81511e+07 0.951137 ns
tpch_q20/DataFusion:arrow 22510903 2.24671e+07 1.00195 ns
tpch_q21/DataFusion:arrow 82015006 8.45284e+07 0.970265 ns
tpch_q22/DataFusion:arrow 10403214 1.07555e+07 0.967248 ns
tpch_q01/DataFusion:parquet 80966343 8.14056e+07 0.994605 ns
tpch_q02/DataFusion:parquet 68595428 6.97406e+07 0.98358 ns
tpch_q03/DataFusion:parquet 44782414 4.47792e+07 1.00007 ns
tpch_q04/DataFusion:parquet 22939097 2.30359e+07 0.995796 ns
tpch_q05/DataFusion:parquet 66077769 6.43494e+07 1.02686 ns
tpch_q06/DataFusion:parquet 18190123 1.83045e+07 0.99375 ns
tpch_q07/DataFusion:parquet 102437273 9.94728e+07 1.0298 ns
tpch_q08/DataFusion:parquet 76122170 7.59511e+07 1.00225 ns
tpch_q09/DataFusion:parquet 105397976 1.03428e+08 1.01904 ns
tpch_q10/DataFusion:parquet 82715323 8.18379e+07 1.01072 ns
tpch_q11/DataFusion:parquet 32932156 3.15244e+07 1.04466 ns
tpch_q12/DataFusion:parquet 32551233 3.26842e+07 0.995931 ns
tpch_q13/DataFusion:parquet 36903304 3.7936e+07 0.972779 ns
tpch_q14/DataFusion:parquet 23422742 2.28326e+07 1.02585 ns
tpch_q15/DataFusion:parquet 42029205 4.01869e+07 1.04584 ns
tpch_q16/DataFusion:parquet 30937164 3.0774e+07 1.0053 ns
tpch_q17/DataFusion:parquet 91741819 9.19847e+07 0.997359 ns
tpch_q18/DataFusion:parquet 125224980 1.24352e+08 1.00702 ns
tpch_q19/DataFusion:parquet 41277451 4.13157e+07 0.999075 ns
tpch_q20/DataFusion:parquet 59135278 5.77455e+07 1.02407 ns
tpch_q21/DataFusion:parquet 128476395 1.26752e+08 1.0136 ns
tpch_q22/DataFusion:parquet 33855119 3.48357e+07 0.97185 ns
tpch_q01/DataFusion:vortex-file-compressed 52280217 5.48278e+07 0.953534 ns
tpch_q02/DataFusion:vortex-file-compressed 51077574 5.24114e+07 0.97455 ns
tpch_q03/DataFusion:vortex-file-compressed 30032567 3.13556e+07 0.957805 ns
tpch_q04/DataFusion:vortex-file-compressed 16581642 1.72005e+07 0.964023 ns
tpch_q05/DataFusion:vortex-file-compressed 53492999 5.63292e+07 0.94965 ns
tpch_q06/DataFusion:vortex-file-compressed 7698942 7.71277e+06 0.998207 ns
tpch_q07/DataFusion:vortex-file-compressed 83338517 8.52854e+07 0.977172 ns
tpch_q08/DataFusion:vortex-file-compressed 58947900 5.9691e+07 0.987552 ns
tpch_q09/DataFusion:vortex-file-compressed 90498419 8.82152e+07 1.02588 ns
tpch_q10/DataFusion:vortex-file-compressed 41335893 4.08289e+07 1.01242 ns
tpch_q11/DataFusion:vortex-file-compressed 26249869 2.72439e+07 0.963513 ns
tpch_q12/DataFusion:vortex-file-compressed 18395296 1.89563e+07 0.970403 ns
tpch_q13/DataFusion:vortex-file-compressed 20911287 1.96773e+07 1.06271 ns
tpch_q14/DataFusion:vortex-file-compressed 11221810 1.04699e+07 1.07181 ns
tpch_q15/DataFusion:vortex-file-compressed 19064224 1.90325e+07 1.00167 ns
tpch_q16/DataFusion:vortex-file-compressed 26396417 2.58988e+07 1.01921 ns
tpch_q17/DataFusion:vortex-file-compressed 83169031 8.20265e+07 1.01393 ns
tpch_q18/DataFusion:vortex-file-compressed 114201412 1.12313e+08 1.01681 ns
tpch_q19/DataFusion:vortex-file-compressed 16054154 1.75157e+07 0.916559 ns
tpch_q20/DataFusion:vortex-file-compressed 34735161 3.51601e+07 0.987913 ns
tpch_q21/DataFusion:vortex-file-compressed 106471810 1.06136e+08 1.00316 ns
tpch_q22/DataFusion:vortex-file-compressed 12960046 1.25287e+07 1.03443 ns
tpch_q01/DuckDB:parquet 36000000 3.7e+07 0.972973 ns
tpch_q02/DuckDB:parquet 26000000 2.6e+07 1 ns
tpch_q03/DuckDB:parquet 38000000 3.7e+07 1.02703 ns
tpch_q04/DuckDB:parquet 26000000 2.6e+07 1 ns
tpch_q05/DuckDB:parquet 38000000 3.7e+07 1.02703 ns
tpch_q06/DuckDB:parquet 13000000 1.3e+07 1 ns
tpch_q07/DuckDB:parquet 41000000 4.2e+07 0.97619 ns
tpch_q08/DuckDB:parquet 43000000 4.3e+07 1 ns
tpch_q09/DuckDB:parquet 83000000 8e+07 1.0375 ns
tpch_q10/DuckDB:parquet 84000000 8.2e+07 1.02439 ns
tpch_q11/DuckDB:parquet 14000000 1.4e+07 1 ns
tpch_q12/DuckDB:parquet 25000000 2.5e+07 1 ns
tpch_q13/DuckDB:parquet 47000000 4.6e+07 1.02174 ns
tpch_q14/DuckDB:parquet 31000000 3e+07 1.03333 ns
tpch_q15/DuckDB:parquet 39000000 3.8e+07 1.02632 ns
tpch_q16/DuckDB:parquet 50000000 4.9e+07 1.02041 ns
tpch_q17/DuckDB:parquet 37000000 3.6e+07 1.02778 ns
tpch_q18/DuckDB:parquet 46000000 4.7e+07 0.978723 ns
tpch_q19/DuckDB:parquet 41000000 4.3e+07 0.953488 ns
tpch_q20/DuckDB:parquet 37000000 3.7e+07 1 ns
tpch_q21/DuckDB:parquet 102000000 1.01e+08 1.0099 ns
tpch_q22/DuckDB:parquet 32000000 3.3e+07 0.969697 ns
tpch_q01/DuckDB:vortex-file-compressed 47000000 5.3e+07 0.886792 ns
tpch_q02/DuckDB:vortex-file-compressed 35000000 3.5e+07 1 ns
tpch_q03/DuckDB:vortex-file-compressed 53000000 5.5e+07 0.963636 ns
tpch_q04/DuckDB:vortex-file-compressed 45000000 4.5e+07 1 ns
tpch_q05/DuckDB:vortex-file-compressed 58000000 6.1e+07 0.95082 ns
tpch_q06/DuckDB:vortex-file-compressed 4000000 5e+06 0.8 ns
tpch_q07/DuckDB:vortex-file-compressed 60000000 6.2e+07 0.967742 ns
tpch_q08/DuckDB:vortex-file-compressed 66000000 7.3e+07 0.90411 ns
tpch_q09/DuckDB:vortex-file-compressed 84000000 9.4e+07 0.893617 ns
tpch_q10/DuckDB:vortex-file-compressed 86000000 9e+07 0.955556 ns
tpch_q11/DuckDB:vortex-file-compressed 24000000 2.6e+07 0.923077 ns
tpch_q12/DuckDB:vortex-file-compressed 42000000 4.6e+07 0.913043 ns
tpch_q13/DuckDB:vortex-file-compressed 60000000 6e+07 1 ns
tpch_q14/DuckDB:vortex-file-compressed 38000000 3.6e+07 1.05556 ns
tpch_q15/DuckDB:vortex-file-compressed 49000000 5.3e+07 0.924528 ns
tpch_q16/DuckDB:vortex-file-compressed 52000000 5.5e+07 0.945455 ns
tpch_q17/DuckDB:vortex-file-compressed 77000000 8.9e+07 0.865169 ns
tpch_q18/DuckDB:vortex-file-compressed 61000000 6.4e+07 0.953125 ns
tpch_q19/DuckDB:vortex-file-compressed 43000000 4.7e+07 0.914894 ns
tpch_q20/DuckDB:vortex-file-compressed 50000000 4.8e+07 1.04167 ns
tpch_q21/DuckDB:vortex-file-compressed 129000000 1.29e+08 1 ns
tpch_q22/DuckDB:vortex-file-compressed 32000000 3.4e+07 0.941176 ns
tpch_q01/DuckDB:duckdb 20000000 2.1e+07 0.952381 ns
tpch_q02/DuckDB:duckdb 16000000 1.6e+07 1 ns
tpch_q03/DuckDB:duckdb 27000000 2.6e+07 1.03846 ns
tpch_q04/DuckDB:duckdb 19000000 1.9e+07 1 ns
tpch_q05/DuckDB:duckdb 28000000 2.7e+07 1.03704 ns
tpch_q06/DuckDB:duckdb 8000000 8e+06 1 ns
tpch_q07/DuckDB:duckdb 30000000 3.2e+07 0.9375 ns
tpch_q08/DuckDB:duckdb 30000000 2.9e+07 1.03448 ns
tpch_q09/DuckDB:duckdb 71000000 7.1e+07 1 ns
tpch_q10/DuckDB:duckdb 66000000 6.8e+07 0.970588 ns
tpch_q11/DuckDB:duckdb 9000000 9e+06 1 ns
tpch_q12/DuckDB:duckdb 23000000 2.2e+07 1.04545 ns
tpch_q13/DuckDB:duckdb 41000000 4.3e+07 0.953488 ns
tpch_q14/DuckDB:duckdb 22000000 2.2e+07 1 ns
tpch_q15/DuckDB:duckdb 26000000 2.8e+07 0.928571 ns
tpch_q16/DuckDB:duckdb 43000000 4.4e+07 0.977273 ns
tpch_q17/DuckDB:duckdb 28000000 2.9e+07 0.965517 ns
tpch_q18/DuckDB:duckdb 37000000 3.6e+07 1.02778 ns
tpch_q19/DuckDB:duckdb 37000000 3.8e+07 0.973684 ns
tpch_q20/DuckDB:duckdb 28000000 2.8e+07 1 ns
tpch_q21/DuckDB:duckdb 61000000 6.4e+07 0.953125 ns
tpch_q22/DuckDB:duckdb 25000000 2.6e+07 0.961538 ns

@github-actions
Copy link
Contributor

Benchmarks: TPC-H on S3

Table of Results
name PR 22e028c base 2f658ec ratio (PR/base) unit
tpch_q01/DataFusion:parquet 184397932 1.90641e+08 0.967253 ns
tpch_q02/DataFusion:parquet 760500835 7.98931e+08 0.951899 ns
tpch_q03/DataFusion:parquet 336834895 3.44946e+08 0.976485 ns
tpch_q04/DataFusion:parquet 208440312 2.20309e+08 0.946128 ns
tpch_q05/DataFusion:parquet 552808822 5.54274e+08 0.997357 ns
tpch_q06/DataFusion:parquet 132369871 1.35495e+08 0.976932 ns
tpch_q07/DataFusion:parquet 592935665 5.83109e+08 1.01685 ns
tpch_q08/DataFusion:parquet 769085119 7.58658e+08 1.01374 ns
tpch_q09/DataFusion:parquet 645533217 6.21269e+08 1.03906 ns
tpch_q10/DataFusion:parquet 522062863 5.28451e+08 0.987912 ns
tpch_q11/DataFusion:parquet 259794244 2.73753e+08 0.949011 ns
tpch_q12/DataFusion:parquet 278065328 2.73328e+08 1.01733 ns
tpch_q13/DataFusion:parquet 210507906 2.04878e+08 1.02748 ns
tpch_q14/DataFusion:parquet 257350271 2.6575e+08 0.968392 ns
tpch_q15/DataFusion:parquet 358328742 3.57141e+08 1.00332 ns
tpch_q16/DataFusion:parquet 372725900 3.69523e+08 1.00867 ns
tpch_q17/DataFusion:parquet 521601554 5.11882e+08 1.01899 ns
tpch_q18/DataFusion:parquet 464150964 4.67879e+08 0.992033 ns
tpch_q19/DataFusion:parquet 358486373 3.63921e+08 0.985066 ns
tpch_q20/DataFusion:parquet 524705692 5.10065e+08 1.0287 ns
tpch_q21/DataFusion:parquet 731519557 7.20732e+08 1.01497 ns
tpch_q22/DataFusion:parquet 196249313 1.92323e+08 1.02042 ns
tpch_q01/DataFusion:vortex-file-compressed 155440409 1.61406e+08 0.96304 ns
tpch_q02/DataFusion:vortex-file-compressed 147430948 1.57727e+08 0.934725 ns
tpch_q03/DataFusion:vortex-file-compressed 222622588 2.28552e+08 0.974058 ns
tpch_q04/DataFusion:vortex-file-compressed 141243783 1.79934e+08 0.784974 ns
tpch_q05/DataFusion:vortex-file-compressed 241632177 2.39835e+08 1.00749 ns
tpch_q06/DataFusion:vortex-file-compressed 123325829 1.03897e+08 1.187 ns
tpch_q07/DataFusion:vortex-file-compressed 258280329 2.58051e+08 1.00089 ns
tpch_q08/DataFusion:vortex-file-compressed 296985387 2.99924e+08 0.990201 ns
tpch_q09/DataFusion:vortex-file-compressed 315421558 3.10854e+08 1.01469 ns
tpch_q10/DataFusion:vortex-file-compressed 266352484 2.66131e+08 1.00083 ns
tpch_q11/DataFusion:vortex-file-compressed 83233634 9.01116e+07 0.923673 ns
tpch_q12/DataFusion:vortex-file-compressed 202012277 1.92588e+08 1.04894 ns
tpch_q13/DataFusion:vortex-file-compressed 132759975 1.27397e+08 1.0421 ns
tpch_q14/DataFusion:vortex-file-compressed 133742960 1.41571e+08 0.944705 ns
tpch_q15/DataFusion:vortex-file-compressed 202566909 2.1565e+08 0.939334 ns
tpch_q16/DataFusion:vortex-file-compressed 94446138 9.51278e+07 0.992834 ns
tpch_q17/DataFusion:vortex-file-compressed 254311688 2.60882e+08 0.974815 ns
tpch_q18/DataFusion:vortex-file-compressed 345864508 3.48825e+08 0.991513 ns
tpch_q19/DataFusion:vortex-file-compressed 174770619 1.77732e+08 0.983337 ns
tpch_q20/DataFusion:vortex-file-compressed 226842783 2.45366e+08 0.924507 ns
tpch_q21/DataFusion:vortex-file-compressed 395641976 4.1519e+08 0.952919 ns
tpch_q22/DataFusion:vortex-file-compressed 83739265 8.58469e+07 0.975449 ns
tpch_q01/DuckDB:parquet 418000000 4.58e+08 0.912664 ns
tpch_q02/DuckDB:parquet 500000000 4.67e+08 1.07066 ns
tpch_q03/DuckDB:parquet 571000000 5.75e+08 0.993043 ns
tpch_q04/DuckDB:parquet 343000000 3.75e+08 0.914667 ns
tpch_q05/DuckDB:parquet 620000000 6.16e+08 1.00649 ns
tpch_q06/DuckDB:parquet 257000000 2.48e+08 1.03629 ns
tpch_q07/DuckDB:parquet 596000000 5.6e+08 1.06429 ns
tpch_q08/DuckDB:parquet 628000000 6.72e+08 0.934524 ns
tpch_q09/DuckDB:parquet 774000000 7.82e+08 0.98977 ns
tpch_q10/DuckDB:parquet 775000000 8.26e+08 0.938257 ns
tpch_q11/DuckDB:parquet 264000000 2.87e+08 0.919861 ns
tpch_q12/DuckDB:parquet 309000000 3.41e+08 0.906158 ns
tpch_q13/DuckDB:parquet 267000000 2.57e+08 1.03891 ns
tpch_q14/DuckDB:parquet 397000000 3.78e+08 1.05026 ns
tpch_q15/DuckDB:parquet 439000000 4.17e+08 1.05276 ns
tpch_q16/DuckDB:parquet 278000000 3.29e+08 0.844985 ns
tpch_q17/DuckDB:parquet 349000000 3.61e+08 0.966759 ns
tpch_q18/DuckDB:parquet 375000000 3.72e+08 1.00806 ns
tpch_q19/DuckDB:parquet 508000000 5.26e+08 0.965779 ns
tpch_q20/DuckDB:parquet 560000000 5.58e+08 1.00358 ns
tpch_q21/DuckDB:parquet 532000000 5.8e+08 0.917241 ns
tpch_q22/DuckDB:parquet 199000000 2.34e+08 0.850427 ns
tpch_q01/DuckDB:vortex-file-compressed 51000000 5.7e+07 0.894737 ns
tpch_q02/DuckDB:vortex-file-compressed 33000000 3.5e+07 0.942857 ns
tpch_q03/DuckDB:vortex-file-compressed 54000000 5.9e+07 0.915254 ns
tpch_q04/DuckDB:vortex-file-compressed 43000000 4.5e+07 0.955556 ns
tpch_q05/DuckDB:vortex-file-compressed 57000000 6.7e+07 0.850746 ns
tpch_q06/DuckDB:vortex-file-compressed 4000000 5e+06 0.8 ns
tpch_q07/DuckDB:vortex-file-compressed 58000000 6.6e+07 0.878788 ns
tpch_q08/DuckDB:vortex-file-compressed 66000000 6.9e+07 0.956522 ns
tpch_q09/DuckDB:vortex-file-compressed 87000000 9.7e+07 0.896907 ns
tpch_q10/DuckDB:vortex-file-compressed 84000000 9.1e+07 0.923077 ns
tpch_q11/DuckDB:vortex-file-compressed 23000000 2.5e+07 0.92 ns
tpch_q12/DuckDB:vortex-file-compressed 43000000 5e+07 0.86 ns
tpch_q13/DuckDB:vortex-file-compressed 57000000 6e+07 0.95 ns
tpch_q14/DuckDB:vortex-file-compressed 34000000 3.8e+07 0.894737 ns
tpch_q15/DuckDB:vortex-file-compressed 51000000 6e+07 0.85 ns
tpch_q16/DuckDB:vortex-file-compressed 51000000 5.2e+07 0.980769 ns
tpch_q17/DuckDB:vortex-file-compressed 83000000 8.4e+07 0.988095 ns
tpch_q18/DuckDB:vortex-file-compressed 64000000 6.7e+07 0.955224 ns
tpch_q19/DuckDB:vortex-file-compressed 41000000 4.8e+07 0.854167 ns
tpch_q20/DuckDB:vortex-file-compressed 45000000 5.4e+07 0.833333 ns
tpch_q21/DuckDB:vortex-file-compressed 131000000 1.46e+08 0.89726 ns
tpch_q22/DuckDB:vortex-file-compressed 32000000 3.3e+07 0.969697 ns

@github-actions
Copy link
Contributor

Benchmarks: compress

Table of Results
name PR 22e028c base 2f658ec ratio (PR/base) unit
compress time/taxi 2.03196e+08 1.94006e+08 1.04737 ns
parquet_rs-zstd compress time/taxi 1.72961e+09 1.6577e+09 1.04338 ns
decompress time/taxi 1.32549e+08 1.28819e+08 1.02896 ns
parquet_rs-zstd decompress time/taxi 2.96748e+08 2.83221e+08 1.04776 ns
compress time/Arade 4.40745e+08 4.09631e+08 1.07596 ns
parquet_rs-zstd compress time/Arade 2.87057e+09 2.77875e+09 1.03304 ns
decompress time/Arade 3.14777e+08 2.96602e+08 1.06128 ns
parquet_rs-zstd decompress time/Arade 6.54462e+08 6.04705e+08 1.08228 ns
compress time/Bimbo 1.67477e+09 1.52744e+09 1.09646 ns
parquet_rs-zstd compress time/Bimbo 1.86469e+10 1.82576e+10 1.02132 ns
decompress time/Bimbo 1.18288e+09 1.09004e+09 1.08516 ns
parquet_rs-zstd decompress time/Bimbo 2.4523e+09 2.27078e+09 1.07994 ns
compress time/CMSprovider 1.11606e+09 1.04251e+09 1.07055 ns
parquet_rs-zstd compress time/CMSprovider 8.57645e+09 8.34661e+09 1.02754 ns
decompress time/CMSprovider 7.35856e+08 7.04069e+08 1.04515 ns
parquet_rs-zstd decompress time/CMSprovider 1.57896e+09 1.50332e+09 1.05032 ns
compress time/Euro2016 2.50363e+08 2.45984e+08 1.0178 ns
parquet_rs-zstd compress time/Euro2016 1.53679e+09 1.4854e+09 1.03459 ns
decompress time/Euro2016 2.50778e+08 2.36617e+08 1.05985 ns
parquet_rs-zstd decompress time/Euro2016 4.36282e+08 4.13301e+08 1.0556 ns
compress time/Food 1.93377e+08 1.73405e+08 1.11518 ns
parquet_rs-zstd compress time/Food 1.00831e+09 9.83595e+08 1.02512 ns
decompress time/Food 9.48369e+07 9.09908e+07 1.04227 ns
parquet_rs-zstd decompress time/Food 2.03225e+08 1.90528e+08 1.06664 ns
compress time/HashTags 1.63507e+09 1.5619e+09 1.04685 ns
parquet_rs-zstd compress time/HashTags 2.81214e+09 2.68718e+09 1.0465 ns
decompress time/HashTags 1.89391e+09 1.82277e+09 1.03903 ns
parquet_rs-zstd decompress time/HashTags 6.84814e+08 6.28921e+08 1.08887 ns
compress time/TPC-H l_comment chunked 1.85445e+08 1.78912e+08 1.03651 ns
parquet_rs-zstd compress time/TPC-H l_comment chunked 8.77257e+08 8.48497e+08 1.0339 ns
decompress time/TPC-H l_comment chunked 9.77217e+07 9.84682e+07 0.992419 ns
parquet_rs-zstd decompress time/TPC-H l_comment chunked 2.3899e+08 2.24739e+08 1.06341 ns
compress time/TPC-H l_comment canonical 1.58042e+09 1.56805e+09 1.00789 ns
parquet_rs-zstd compress time/TPC-H l_comment canonical 8.89611e+08 8.68297e+08 1.02455 ns
decompress time/TPC-H l_comment canonical 1.09234e+08 1.06004e+08 1.03047 ns
parquet_rs-zstd decompress time/TPC-H l_comment canonical 2.43284e+08 2.27544e+08 1.06917 ns
compress time/wide table cols=10 chunks=1 rows=1000 1.82246e+06 1.77332e+06 1.02771 ns
parquet_rs-zstd compress time/wide table cols=10 chunks=1 rows=1000 827764 757516 1.09273 ns
decompress time/wide table cols=10 chunks=1 rows=1000 154086 150314 1.02509 ns
parquet_rs-zstd decompress time/wide table cols=10 chunks=1 rows=1000 290742 270679 1.07412 ns
compress time/wide table cols=100 chunks=1 rows=1000 4.50749e+06 4.40504e+06 1.02326 ns
parquet_rs-zstd compress time/wide table cols=100 chunks=1 rows=1000 7.72132e+06 7.31903e+06 1.05497 ns
decompress time/wide table cols=100 chunks=1 rows=1000 1.75187e+06 1.59193e+06 1.10047 ns
parquet_rs-zstd decompress time/wide table cols=100 chunks=1 rows=1000 2.73445e+06 2.6758e+06 1.02192 ns
compress time/wide table cols=1000 chunks=1 rows=1000 5.4341e+07 5.80724e+07 0.935745 ns
parquet_rs-zstd compress time/wide table cols=1000 chunks=1 rows=1000 9.58273e+07 8.62757e+07 1.11071 ns
decompress time/wide table cols=1000 chunks=1 rows=1000 4.28362e+07 3.73845e+07 1.14583 ns
parquet_rs-zstd decompress time/wide table cols=1000 chunks=1 rows=1000 3.05314e+07 2.87611e+07 1.06155 ns
compress time/wide table cols=10 chunks=50 rows=1000 3.03656e+06 2.90665e+06 1.0447 ns
parquet_rs-zstd compress time/wide table cols=10 chunks=50 rows=1000 1.09732e+06 1.08236e+06 1.01382 ns
decompress time/wide table cols=10 chunks=50 rows=1000 162178 148907 1.08912 ns
parquet_rs-zstd decompress time/wide table cols=10 chunks=50 rows=1000 274146 266359 1.02923 ns
compress time/wide table cols=100 chunks=50 rows=1000 3.2627e+07 2.84568e+07 1.14654 ns
parquet_rs-zstd compress time/wide table cols=100 chunks=50 rows=1000 1.36489e+07 1.05485e+07 1.29392 ns
decompress time/wide table cols=100 chunks=50 rows=1000 1.63111e+06 1.568e+06 1.04025 ns
parquet_rs-zstd decompress time/wide table cols=100 chunks=50 rows=1000 2.72966e+06 2.67797e+06 1.0193 ns
compress time/wide table cols=1000 chunks=50 rows=1000 3.57227e+08 3.29521e+08 1.08408 ns
parquet_rs-zstd compress time/wide table cols=1000 chunks=50 rows=1000 1.59673e+08 1.44767e+08 1.10297 ns
decompress time/wide table cols=1000 chunks=50 rows=1000 3.87601e+07 3.96211e+07 0.978271 ns
parquet_rs-zstd decompress time/wide table cols=1000 chunks=50 rows=1000 3.09039e+07 2.88328e+07 1.07183 ns
vortex size/taxi 5.54822e+07 5.54822e+07 1 bytes
parquet-zstd size/taxi 5.59542e+07 5.59542e+07 1 bytes
vortex:parquet-zstd size/taxi 0.991564 0.991564 1 ratio
vortex:parquet-zstd ratio compress time/taxi 0.117481 0.117033 1.00382 ratio
vortex:parquet-zstd ratio decompress time/taxi 0.446671 0.454834 0.982053 ratio
vortex size/Arade 1.42473e+08 1.42473e+08 1 bytes
parquet-zstd size/Arade 3.0538e+08 3.0538e+08 1 bytes
vortex:parquet-zstd size/Arade 0.466542 0.466542 1 ratio
vortex:parquet-zstd ratio compress time/Arade 0.153539 0.147416 1.04154 ratio
vortex:parquet-zstd ratio decompress time/Arade 0.480971 0.49049 0.980594 ratio
vortex size/Bimbo 5.19886e+08 5.19886e+08 1 bytes
parquet-zstd size/Bimbo 3.89789e+08 3.89789e+08 1 bytes
vortex:parquet-zstd size/Bimbo 1.33376 1.33376 1 ratio
vortex:parquet-zstd ratio compress time/Bimbo 0.0898151 0.0836604 1.07357 ratio
vortex:parquet-zstd ratio decompress time/Bimbo 0.482355 0.480031 1.00484 ratio
vortex size/CMSprovider 5.04745e+08 5.04745e+08 1 bytes
parquet-zstd size/CMSprovider 3.84908e+08 3.84908e+08 1 bytes
vortex:parquet-zstd size/CMSprovider 1.31134 1.31134 1 ratio
vortex:parquet-zstd ratio compress time/CMSprovider 0.130131 0.124902 1.04186 ratio
vortex:parquet-zstd ratio decompress time/CMSprovider 0.466037 0.468343 0.995077 ratio
vortex size/Euro2016 1.71735e+08 1.71735e+08 1 bytes
parquet-zstd size/Euro2016 1.23121e+08 1.23121e+08 1 bytes
vortex:parquet-zstd size/Euro2016 1.39485 1.39485 1 ratio
vortex:parquet-zstd ratio compress time/Euro2016 0.162914 0.165601 0.98377 ratio
vortex:parquet-zstd ratio decompress time/Euro2016 0.574806 0.572505 1.00402 ratio
vortex size/Food 4.47057e+07 4.4707e+07 0.999972 bytes
parquet-zstd size/Food 3.62159e+07 3.62159e+07 1 bytes
vortex:parquet-zstd size/Food 1.23442 1.23446 0.999972 ratio
vortex:parquet-zstd ratio compress time/Food 0.191784 0.176297 1.08785 ratio
vortex:parquet-zstd ratio decompress time/Food 0.46666 0.477571 0.977152 ratio
vortex size/HashTags 2.10503e+08 2.10503e+08 1 bytes
parquet-zstd size/HashTags 1.33942e+08 1.33942e+08 1 bytes
vortex:parquet-zstd size/HashTags 1.5716 1.5716 1 ratio
vortex:parquet-zstd ratio compress time/HashTags 0.581432 0.58124 1.00033 ratio
vortex:parquet-zstd ratio decompress time/HashTags 2.76559 2.89824 0.954229 ratio
vortex size/TPC-H l_comment chunked 7.57443e+07 7.57423e+07 1.00003 bytes
parquet-zstd size/TPC-H l_comment chunked 5.69208e+07 5.69227e+07 0.999966 bytes
vortex:parquet-zstd size/TPC-H l_comment chunked 1.3307 1.33062 1.00006 ratio
vortex:parquet-zstd ratio compress time/TPC-H l_comment chunked 0.211392 0.210858 1.00253 ratio
vortex:parquet-zstd ratio decompress time/TPC-H l_comment chunked 0.408894 0.438145 0.93324 ratio
vortex size/TPC-H l_comment canonical 7.67481e+07 7.6737e+07 1.00014 bytes
parquet-zstd size/TPC-H l_comment canonical 5.6921e+07 5.69183e+07 1.00005 bytes
vortex:parquet-zstd size/TPC-H l_comment canonical 1.34833 1.3482 1.0001 ratio
vortex:parquet-zstd ratio compress time/TPC-H l_comment canonical 1.77653 1.80589 0.983739 ratio
vortex:parquet-zstd ratio decompress time/TPC-H l_comment canonical 0.448997 0.46586 0.963803 ratio
vortex size/wide table cols=10 chunks=1 rows=1000 108960 108960 1 bytes
parquet-zstd size/wide table cols=10 chunks=1 rows=1000 93484 93484 1 bytes
vortex:parquet-zstd size/wide table cols=10 chunks=1 rows=1000 1.16555 1.16555 1 ratio
vortex:parquet-zstd ratio compress time/wide table cols=10 chunks=1 rows=1000 2.20167 2.34097 0.940497 ratio
vortex:parquet-zstd ratio decompress time/wide table cols=10 chunks=1 rows=1000 0.529975 0.555322 0.954356 ratio
vortex size/wide table cols=100 chunks=1 rows=1000 1.08348e+06 1.08348e+06 1 bytes
parquet-zstd size/wide table cols=100 chunks=1 rows=1000 934804 934804 1 bytes
vortex:parquet-zstd size/wide table cols=100 chunks=1 rows=1000 1.15905 1.15905 1 ratio
vortex:parquet-zstd ratio compress time/wide table cols=100 chunks=1 rows=1000 0.583771 0.601861 0.969944 ratio
vortex:parquet-zstd ratio decompress time/wide table cols=100 chunks=1 rows=1000 0.640667 0.594938 1.07686 ratio
vortex size/wide table cols=1000 chunks=1 rows=1000 1.08287e+07 1.08287e+07 1 bytes
parquet-zstd size/wide table cols=1000 chunks=1 rows=1000 9.348e+06 9.348e+06 1 bytes
vortex:parquet-zstd size/wide table cols=1000 chunks=1 rows=1000 1.15839 1.15839 1 ratio
vortex:parquet-zstd ratio compress time/wide table cols=1000 chunks=1 rows=1000 0.567072 0.673103 0.842474 ratio
vortex:parquet-zstd ratio decompress time/wide table cols=1000 chunks=1 rows=1000 1.40302 1.29983 1.07939 ratio
vortex size/wide table cols=10 chunks=50 rows=1000 108960 108960 1 bytes
parquet-zstd size/wide table cols=10 chunks=50 rows=1000 93484 93484 1 bytes
vortex:parquet-zstd size/wide table cols=10 chunks=50 rows=1000 1.16555 1.16555 1 ratio
vortex:parquet-zstd ratio compress time/wide table cols=10 chunks=50 rows=1000 2.76724 2.68546 1.03045 ratio
vortex:parquet-zstd ratio decompress time/wide table cols=10 chunks=50 rows=1000 0.591575 0.559046 1.05819 ratio
vortex size/wide table cols=100 chunks=50 rows=1000 1.08348e+06 1.08348e+06 1 bytes
parquet-zstd size/wide table cols=100 chunks=50 rows=1000 934804 934804 1 bytes
vortex:parquet-zstd size/wide table cols=100 chunks=50 rows=1000 1.15905 1.15905 1 ratio
vortex:parquet-zstd ratio compress time/wide table cols=100 chunks=50 rows=1000 2.39044 2.69771 0.886101 ratio
vortex:parquet-zstd ratio decompress time/wide table cols=100 chunks=50 rows=1000 0.597549 0.585518 1.02055 ratio
vortex size/wide table cols=1000 chunks=50 rows=1000 1.08287e+07 1.08287e+07 1 bytes
parquet-zstd size/wide table cols=1000 chunks=50 rows=1000 9.348e+06 9.348e+06 1 bytes
vortex:parquet-zstd size/wide table cols=1000 chunks=50 rows=1000 1.15839 1.15839 1 ratio
vortex:parquet-zstd ratio compress time/wide table cols=1000 chunks=50 rows=1000 2.23724 2.27622 0.982876 ratio
vortex:parquet-zstd ratio decompress time/wide table cols=1000 chunks=50 rows=1000 1.25422 1.37416 0.912712 ratio

@github-actions
Copy link
Contributor

Benchmarks: Clickbench on NVME

Table of Results
name PR 22e028c base 2f658ec ratio (PR/base) unit
clickbench_q00/DataFusion:parquet 15101626 1.29474e+07 1.16638 ns
clickbench_q01/DataFusion:parquet 27625513 2.57271e+07 1.07379 ns
clickbench_q02/DataFusion:parquet 60266375 6.00272e+07 1.00398 ns
clickbench_q03/DataFusion:parquet 58080290 5.46548e+07 1.06268 ns
clickbench_q04/DataFusion:parquet 364354694 3.28479e+08 1.10922 ns
clickbench_q05/DataFusion:parquet 410110683 3.81675e+08 1.0745 ns
clickbench_q06/DataFusion:parquet 35531531 3.30297e+07 1.07574 ns
clickbench_q07/DataFusion:parquet 32015936 2.92645e+07 1.09402 ns
clickbench_q08/DataFusion:parquet 496302181 4.69164e+08 1.05784 ns
clickbench_q09/DataFusion:parquet 735557718 6.73586e+08 1.092 ns
clickbench_q10/DataFusion:parquet 155001424 1.54386e+08 1.00399 ns
clickbench_q11/DataFusion:parquet 179218732 1.72991e+08 1.036 ns
clickbench_q12/DataFusion:parquet 438749274 4.12465e+08 1.06373 ns
clickbench_q13/DataFusion:parquet 629069121 5.9263e+08 1.06149 ns
clickbench_q14/DataFusion:parquet 416190565 3.97647e+08 1.04663 ns
clickbench_q15/DataFusion:parquet 433899575 4.18414e+08 1.03701 ns
clickbench_q16/DataFusion:parquet 887525312 8.42954e+08 1.05288 ns
clickbench_q17/DataFusion:parquet 840921777 8.26623e+08 1.0173 ns
clickbench_q18/DataFusion:parquet 1666558551 1.49088e+09 1.11783 ns
clickbench_q19/DataFusion:parquet 42863415 4.20172e+07 1.02014 ns
clickbench_q20/DataFusion:parquet 680306044 6.4243e+08 1.05896 ns
clickbench_q21/DataFusion:parquet 757529207 7.51647e+08 1.00783 ns
clickbench_q22/DataFusion:parquet 1126135613 1.08742e+09 1.03561 ns
clickbench_q23/DataFusion:parquet 4995101135 4.82386e+09 1.0355 ns
clickbench_q24/DataFusion:parquet 258304369 2.51307e+08 1.02785 ns
clickbench_q25/DataFusion:parquet 216605168 2.13313e+08 1.01543 ns
clickbench_q26/DataFusion:parquet 295927040 2.86041e+08 1.03456 ns
clickbench_q27/DataFusion:parquet 1147377296 1.09687e+09 1.04605 ns
clickbench_q28/DataFusion:parquet 6008385080 5.85902e+09 1.02549 ns
clickbench_q29/DataFusion:parquet 253742773 2.37801e+08 1.06704 ns
clickbench_q30/DataFusion:parquet 402768476 3.87841e+08 1.03849 ns
clickbench_q31/DataFusion:parquet 462419882 4.42185e+08 1.04576 ns
clickbench_q32/DataFusion:parquet 1433621046 1.37084e+09 1.0458 ns
clickbench_q33/DataFusion:parquet 1771201212 1.69996e+09 1.04191 ns
clickbench_q34/DataFusion:parquet 1789578538 1.73493e+09 1.0315 ns
clickbench_q35/DataFusion:parquet 680926863 6.33431e+08 1.07498 ns
clickbench_q36/DataFusion:parquet 201830237 1.89269e+08 1.06637 ns
clickbench_q37/DataFusion:parquet 74879137 7.21155e+07 1.03832 ns
clickbench_q38/DataFusion:parquet 112662259 1.04203e+08 1.08118 ns
clickbench_q39/DataFusion:parquet 357133684 3.4665e+08 1.03024 ns
clickbench_q40/DataFusion:parquet 41581585 4.07416e+07 1.02062 ns
clickbench_q41/DataFusion:parquet 40744223 4.11366e+07 0.990461 ns
clickbench_q42/DataFusion:parquet 52183291 5.29297e+07 0.985899 ns
clickbench_q00/DataFusion:vortex-file-compressed 4199606 4.178e+06 1.00517 ns
clickbench_q01/DataFusion:vortex-file-compressed 7930860 8.16188e+06 0.971695 ns
clickbench_q02/DataFusion:vortex-file-compressed 29357581 2.77934e+07 1.05628 ns
clickbench_q03/DataFusion:vortex-file-compressed 35431694 3.27886e+07 1.08061 ns
clickbench_q04/DataFusion:vortex-file-compressed 305933075 2.9176e+08 1.04858 ns
clickbench_q05/DataFusion:vortex-file-compressed 350081680 3.47579e+08 1.0072 ns
clickbench_q06/DataFusion:vortex-file-compressed 31072716 3.53604e+07 0.878744 ns
clickbench_q07/DataFusion:vortex-file-compressed 13408080 1.20315e+07 1.11442 ns
clickbench_q08/DataFusion:vortex-file-compressed 425328208 4.04087e+08 1.05257 ns
clickbench_q09/DataFusion:vortex-file-compressed 602614316 5.72402e+08 1.05278 ns
clickbench_q10/DataFusion:vortex-file-compressed 98008493 9.73917e+07 1.00633 ns
clickbench_q11/DataFusion:vortex-file-compressed 117900216 1.10826e+08 1.06383 ns
clickbench_q12/DataFusion:vortex-file-compressed 333834241 3.21077e+08 1.03973 ns
clickbench_q13/DataFusion:vortex-file-compressed 515470624 5.17791e+08 0.995519 ns
clickbench_q14/DataFusion:vortex-file-compressed 315786753 3.02115e+08 1.04525 ns
clickbench_q15/DataFusion:vortex-file-compressed 381810057 3.66845e+08 1.04079 ns
clickbench_q16/DataFusion:vortex-file-compressed 842978443 8.33061e+08 1.01191 ns
clickbench_q17/DataFusion:vortex-file-compressed 830222074 7.89776e+08 1.05121 ns
clickbench_q18/DataFusion:vortex-file-compressed 1567040692 1.52223e+09 1.02944 ns
clickbench_q19/DataFusion:vortex-file-compressed 18520049 1.6197e+07 1.14342 ns
clickbench_q20/DataFusion:vortex-file-compressed 414001992 4.20168e+08 0.985324 ns
clickbench_q21/DataFusion:vortex-file-compressed 498784695 5.00158e+08 0.997254 ns
clickbench_q22/DataFusion:vortex-file-compressed 1039285586 1.01021e+09 1.02878 ns
clickbench_q23/DataFusion:vortex-file-compressed 4267554018 4.16791e+09 1.02391 ns
clickbench_q24/DataFusion:vortex-file-compressed 155464221 1.48196e+08 1.04904 ns
clickbench_q25/DataFusion:vortex-file-compressed 129581682 1.28052e+08 1.01195 ns
clickbench_q26/DataFusion:vortex-file-compressed 184818657 1.90687e+08 0.969225 ns
clickbench_q27/DataFusion:vortex-file-compressed 857417985 8.46367e+08 1.01306 ns
clickbench_q28/DataFusion:vortex-file-compressed 6864598097 6.747e+09 1.01743 ns
clickbench_q29/DataFusion:vortex-file-compressed 261635491 2.49451e+08 1.04884 ns
clickbench_q30/DataFusion:vortex-file-compressed 262742667 2.59381e+08 1.01296 ns
clickbench_q31/DataFusion:vortex-file-compressed 302880794 3.01935e+08 1.00313 ns
clickbench_q32/DataFusion:vortex-file-compressed 1374703991 1.32756e+09 1.03551 ns
clickbench_q33/DataFusion:vortex-file-compressed 1588641265 1.54194e+09 1.03029 ns
clickbench_q34/DataFusion:vortex-file-compressed 1557343228 1.51938e+09 1.02499 ns
clickbench_q35/DataFusion:vortex-file-compressed 598911987 5.78324e+08 1.0356 ns
clickbench_q36/DataFusion:vortex-file-compressed 136860674 1.20704e+08 1.13386 ns
clickbench_q37/DataFusion:vortex-file-compressed 55983425 5.61218e+07 0.997534 ns
clickbench_q38/DataFusion:vortex-file-compressed 63838941 5.96955e+07 1.06941 ns
clickbench_q39/DataFusion:vortex-file-compressed 311245639 3.08892e+08 1.00762 ns
clickbench_q40/DataFusion:vortex-file-compressed 26374547 2.47063e+07 1.06752 ns
clickbench_q41/DataFusion:vortex-file-compressed 28171873 2.71073e+07 1.03927 ns
clickbench_q42/DataFusion:vortex-file-compressed 38119473 3.72123e+07 1.02438 ns
clickbench_q00/DuckDB:parquet 128545774 1.20049e+08 1.07078 ns
clickbench_q01/DuckDB:parquet 50374508 4.91076e+07 1.0258 ns
clickbench_q02/DuckDB:parquet 65041776 6.35229e+07 1.02391 ns
clickbench_q03/DuckDB:parquet 62783149 6.17632e+07 1.01651 ns
clickbench_q04/DuckDB:parquet 221050068 2.171e+08 1.0182 ns
clickbench_q05/DuckDB:parquet 241261963 2.35149e+08 1.026 ns
clickbench_q06/DuckDB:parquet 69238504 6.54621e+07 1.05769 ns
clickbench_q07/DuckDB:parquet 64085786 5.85432e+07 1.09467 ns
clickbench_q08/DuckDB:parquet 289088143 2.79989e+08 1.0325 ns
clickbench_q09/DuckDB:parquet 416848535 4.12524e+08 1.01048 ns
clickbench_q10/DuckDB:parquet 106544571 1.04172e+08 1.02278 ns
clickbench_q11/DuckDB:parquet 116877382 1.157e+08 1.01017 ns
clickbench_q12/DuckDB:parquet 258482927 2.50023e+08 1.03384 ns
clickbench_q13/DuckDB:parquet 432578784 4.21184e+08 1.02705 ns
clickbench_q14/DuckDB:parquet 293725308 2.89314e+08 1.01525 ns
clickbench_q15/DuckDB:parquet 248361139 2.41019e+08 1.03046 ns
clickbench_q16/DuckDB:parquet 589270184 5.78351e+08 1.01888 ns
clickbench_q17/DuckDB:parquet 508072668 4.93077e+08 1.03041 ns
clickbench_q18/DuckDB:parquet 986555869 9.52588e+08 1.03566 ns
clickbench_q19/DuckDB:parquet 60875392 6.03348e+07 1.00896 ns
clickbench_q20/DuckDB:parquet 386727712 3.7749e+08 1.02447 ns
clickbench_q21/DuckDB:parquet 511051214 4.95911e+08 1.03053 ns
clickbench_q22/DuckDB:parquet 873313115 8.3926e+08 1.04058 ns
clickbench_q23/DuckDB:parquet 284970247 2.80382e+08 1.01636 ns
clickbench_q24/DuckDB:parquet 108890739 1.05576e+08 1.03139 ns
clickbench_q25/DuckDB:parquet 141142897 1.4058e+08 1.004 ns
clickbench_q26/DuckDB:parquet 64040070 6.18726e+07 1.03503 ns
clickbench_q27/DuckDB:parquet 633095856 6.38432e+08 0.991641 ns
clickbench_q28/DuckDB:parquet 5719522890 5.67567e+09 1.00773 ns
clickbench_q29/DuckDB:parquet 70736023 7.06636e+07 1.00103 ns
clickbench_q30/DuckDB:parquet 294015978 2.9478e+08 0.997409 ns
clickbench_q31/DuckDB:parquet 345068294 3.40885e+08 1.01227 ns
clickbench_q32/DuckDB:parquet 1062877033 1.04133e+09 1.02069 ns
clickbench_q33/DuckDB:parquet 1110346824 1.05999e+09 1.04751 ns
clickbench_q34/DuckDB:parquet 1170324641 1.13047e+09 1.03526 ns
clickbench_q35/DuckDB:parquet 397168021 4.10242e+08 0.968132 ns
clickbench_q36/DuckDB:parquet 65041111 6.21021e+07 1.04733 ns
clickbench_q37/DuckDB:parquet 59114741 5.02986e+07 1.17527 ns
clickbench_q38/DuckDB:parquet 68841831 5.85963e+07 1.17485 ns
clickbench_q39/DuckDB:parquet 97047841 9.88768e+07 0.981503 ns
clickbench_q40/DuckDB:parquet 65493473 5.49752e+07 1.19133 ns
clickbench_q41/DuckDB:parquet 80390218 7.03816e+07 1.1422 ns
clickbench_q42/DuckDB:parquet 56129534 5.05765e+07 1.10979 ns
clickbench_q00/DuckDB:vortex-file-compressed 8205640 7.65271e+06 1.07225 ns
clickbench_q01/DuckDB:vortex-file-compressed 13077050 1.21594e+07 1.07546 ns
clickbench_q02/DuckDB:vortex-file-compressed 12897244 1.27975e+07 1.00779 ns
clickbench_q03/DuckDB:vortex-file-compressed 20255394 2.05696e+07 0.984723 ns
clickbench_q04/DuckDB:vortex-file-compressed 20593035 1.9561e+07 1.05276 ns
clickbench_q05/DuckDB:vortex-file-compressed 24932671 2.42093e+07 1.02988 ns
clickbench_q06/DuckDB:vortex-file-compressed 12675949 1.24347e+07 1.0194 ns
clickbench_q07/DuckDB:vortex-file-compressed 15903327 1.50015e+07 1.06012 ns
clickbench_q08/DuckDB:vortex-file-compressed 24948933 2.46705e+07 1.01128 ns
clickbench_q09/DuckDB:vortex-file-compressed 32493489 3.06267e+07 1.06095 ns
clickbench_q10/DuckDB:vortex-file-compressed 57722951 5.59453e+07 1.03177 ns
clickbench_q11/DuckDB:vortex-file-compressed 64692448 6.22202e+07 1.03973 ns
clickbench_q12/DuckDB:vortex-file-compressed 54070202 5.64199e+07 0.958353 ns
clickbench_q13/DuckDB:vortex-file-compressed 74565518 7.20295e+07 1.03521 ns
clickbench_q14/DuckDB:vortex-file-compressed 60067896 5.82859e+07 1.03057 ns
clickbench_q15/DuckDB:vortex-file-compressed 18470246 1.80095e+07 1.02558 ns
clickbench_q16/DuckDB:vortex-file-compressed 32586717 3.14682e+07 1.03554 ns
clickbench_q17/DuckDB:vortex-file-compressed 31947341 3.10763e+07 1.02803 ns
clickbench_q18/DuckDB:vortex-file-compressed 47335463 4.61272e+07 1.02619 ns
clickbench_q19/DuckDB:vortex-file-compressed 3376371 3.35814e+06 1.00543 ns
clickbench_q20/DuckDB:vortex-file-compressed 100250000 9.97397e+07 1.00512 ns
clickbench_q21/DuckDB:vortex-file-compressed 309784083 3.10145e+08 0.998836 ns
clickbench_q22/DuckDB:vortex-file-compressed 140186217 1.33198e+08 1.05246 ns
clickbench_q23/DuckDB:vortex-file-compressed 358821958 3.47853e+08 1.03153 ns
clickbench_q24/DuckDB:vortex-file-compressed 62514732 6.56951e+07 0.951588 ns
clickbench_q25/DuckDB:vortex-file-compressed 51354719 5.10367e+07 1.00623 ns
clickbench_q26/DuckDB:vortex-file-compressed 67022600 6.72348e+07 0.996844 ns
clickbench_q27/DuckDB:vortex-file-compressed 57734754 5.90479e+07 0.977761 ns
clickbench_q28/DuckDB:vortex-file-compressed 77962888 7.91364e+07 0.985172 ns
clickbench_q29/DuckDB:vortex-file-compressed 17554293 1.67482e+07 1.04813 ns
clickbench_q30/DuckDB:vortex-file-compressed 89173124 8.66136e+07 1.02955 ns
clickbench_q31/DuckDB:vortex-file-compressed 95508010 9.85541e+07 0.969093 ns
clickbench_q32/DuckDB:vortex-file-compressed 42488849 4.19015e+07 1.01402 ns
clickbench_q33/DuckDB:vortex-file-compressed 45240136 4.21254e+07 1.07394 ns
clickbench_q34/DuckDB:vortex-file-compressed 42752293 4.28816e+07 0.996984 ns
clickbench_q35/DuckDB:vortex-file-compressed 15019261 1.45103e+07 1.03507 ns
clickbench_q36/DuckDB:vortex-file-compressed 15016472 1.39079e+07 1.07971 ns
clickbench_q37/DuckDB:vortex-file-compressed 14485990 1.54899e+07 0.935188 ns
clickbench_q38/DuckDB:vortex-file-compressed 14260649 1.36094e+07 1.04785 ns
clickbench_q39/DuckDB:vortex-file-compressed 21928937 2.14247e+07 1.02354 ns
clickbench_q40/DuckDB:vortex-file-compressed 13991628 1.37548e+07 1.01722 ns
clickbench_q41/DuckDB:vortex-file-compressed 16095299 1.57875e+07 1.0195 ns
clickbench_q42/DuckDB:vortex-file-compressed 11867107 1.23039e+07 0.964503 ns
clickbench_q00/DuckDB:duckdb 14149377 1.27243e+07 1.11199 ns
clickbench_q01/DuckDB:duckdb 6713668 6.38585e+06 1.05134 ns
clickbench_q02/DuckDB:duckdb 13109326 1.19957e+07 1.09283 ns
clickbench_q03/DuckDB:duckdb 47981329 2.61038e+07 1.8381 ns
clickbench_q04/DuckDB:duckdb 298564399 2.90011e+08 1.02949 ns
clickbench_q05/DuckDB:duckdb 369673021 4.50036e+08 0.82143 ns
clickbench_q06/DuckDB:duckdb 13684865 1.36851e+07 0.999985 ns
clickbench_q07/DuckDB:duckdb 7569144 7.24191e+06 1.04519 ns
clickbench_q08/DuckDB:duckdb 326515758 3.09416e+08 1.05526 ns
clickbench_q09/DuckDB:duckdb 461965110 4.9139e+08 0.94012 ns
clickbench_q10/DuckDB:duckdb 67900067 7.82211e+07 0.868053 ns
clickbench_q11/DuckDB:duckdb 89819876 1.00156e+08 0.896797 ns
clickbench_q12/DuckDB:duckdb 270193211 2.3719e+08 1.13914 ns
clickbench_q13/DuckDB:duckdb 520829459 4.80157e+08 1.08471 ns
clickbench_q14/DuckDB:duckdb 227218185 2.47818e+08 0.916874 ns
clickbench_q15/DuckDB:duckdb 238952211 2.44405e+08 0.97769 ns
clickbench_q16/DuckDB:duckdb 638171598 6.04663e+08 1.05542 ns
clickbench_q17/DuckDB:duckdb 503689262 4.49407e+08 1.12079 ns
clickbench_q18/DuckDB:duckdb 1049604266 1.0025e+09 1.04699 ns
clickbench_q19/DuckDB:duckdb 4512629 4.37185e+06 1.0322 ns
clickbench_q20/DuckDB:duckdb 337427911 3.36714e+08 1.00212 ns
clickbench_q21/DuckDB:duckdb 331955913 3.3668e+08 0.98597 ns
clickbench_q22/DuckDB:duckdb 1744431321 1.65186e+09 1.05604 ns
clickbench_q23/DuckDB:duckdb 44586407 4.9465e+07 0.901373 ns
clickbench_q24/DuckDB:duckdb 9261892 1.14764e+07 0.80704 ns
clickbench_q25/DuckDB:duckdb 72758557 6.65122e+07 1.09391 ns
clickbench_q26/DuckDB:duckdb 13088150 7.36124e+06 1.77798 ns
clickbench_q27/DuckDB:duckdb 655862914 5.70329e+08 1.14997 ns
clickbench_q28/DuckDB:duckdb 5765526405 5.82246e+09 0.990222 ns
clickbench_q29/DuckDB:duckdb 21768209 2.11548e+07 1.029 ns
clickbench_q30/DuckDB:duckdb 284816776 2.78388e+08 1.02309 ns
clickbench_q31/DuckDB:duckdb 402490525 4.10633e+08 0.98017 ns
clickbench_q32/DuckDB:duckdb 1254042252 1.2268e+09 1.0222 ns
clickbench_q33/DuckDB:duckdb 1907391887 1.22038e+09 1.56295 ns
clickbench_q34/DuckDB:duckdb 1318859225 1.05279e+09 1.25272 ns
clickbench_q35/DuckDB:duckdb 330905360 3.32692e+08 0.994629 ns
clickbench_q36/DuckDB:duckdb 19957635 1.96165e+07 1.01739 ns
clickbench_q37/DuckDB:duckdb 10560383 1.04654e+07 1.00908 ns
clickbench_q38/DuckDB:duckdb 6240480 6.41601e+06 0.972642 ns
clickbench_q39/DuckDB:duckdb 37417566 4.53383e+07 0.825296 ns
clickbench_q40/DuckDB:duckdb 4851257 5.343e+06 0.907966 ns
clickbench_q41/DuckDB:duckdb 5603928 4.70124e+06 1.19201 ns
clickbench_q42/DuckDB:duckdb 8744344 8.01024e+06 1.09165 ns

@0ax1
Copy link
Contributor Author

0ax1 commented Jun 22, 2025

I wonder if this has much overhead compared to the arrow exporter, maybe marshalling can be done after timing the run?

Marshelling is opt-in where the extend of the marshelling is given by how QueryResult is consumed.

E.g. in clickbench ddb2 we skip the marshelling:

    pub fn execute_query(&self, query: &str) -> Result<Duration> {
        // TODO: handle multiple queries
        trace!("execute duckdb query: {}", query);
        let time_instant = Instant::now();
        self.connection.query(query)?;
        let query_time = time_instant.elapsed();
        trace!("query completed in {:.3}s", query_time.as_secs_f64());

        Ok(query_time)
    }

The result pointer of a query always gets assigned in cpp::duckdb_query(self.as_ptr(), query_cstr.as_ptr(), &mut result).


If you look at develop, e.g.

#[test]
fn test_scan_function_registration() {
    let conn = database_connection();
    let result: String = conn
        .prepare("SELECT function_name FROM duckdb_functions() WHERE function_name = 'vortex_scan'")
        .unwrap()
        .query_row([], |row| row.get(0))
        .unwrap();
    assert_eq!(&result, "vortex_scan");
}

query_row seems to have much more overhead due to the arrow layer, and under the hood eventually calls into:

    /// NOTE: if execute failed, we shouldn't call any other methods which depends on result
    pub fn execute(&mut self) -> Result<usize> {
        self.reset_result();
        unsafe {
            let mut out: ffi::duckdb_arrow = ptr::null_mut();
            let rc = ffi::duckdb_execute_prepared_arrow(self.ptr, &mut out);
            result_from_duckdb_arrow(rc, out)?;

            let rows_changed = ffi::duckdb_arrow_rows_changed(out);
            let mut c_schema = Rc::into_raw(Rc::new(FFI_ArrowSchema::empty()));
            let rc = ffi::duckdb_query_arrow_schema(out, &mut c_schema as *mut _ as *mut ffi::duckdb_arrow_schema);
            if rc != ffi::DuckDBSuccess {
                Rc::from_raw(c_schema);
                result_from_duckdb_arrow(rc, out)?;
            }
            self.schema = Some(Arc::new(Schema::try_from(&*c_schema).unwrap()));
            Rc::from_raw(c_schema);

            self.result = Some(out);
            Ok(rows_changed as usize)
        }
    }

@joseph-isaacs
Copy link
Contributor

joseph-isaacs commented Jun 22, 2025

This is a good find!

It does however rely on another marshalling layer from duckdb to rust primitive think this can be unified with the vx conversion, maybe using vortex scalar or vx-scalar using this marshalling.

@0ax1 0ax1 enabled auto-merge (squash) June 22, 2025 19:06
Signed-off-by: Alexander Droste <[email protected]>
@0ax1 0ax1 requested a review from joseph-isaacs June 23, 2025 12:49
@0ax1 0ax1 merged commit 51fd040 into develop Jun 23, 2025
33 checks passed
@0ax1 0ax1 deleted the ad/expand-ddb-connection-wrapper branch June 23, 2025 12:59
mwlon pushed a commit to mwlon/vortex that referenced this pull request Jul 4, 2025
Replaces duckdb-rs query result handling with custom marshaling via
DuckDB C API. This change removes the dependency on duckdb-rs and
provides more fine-grained control over querying and result processing.

Changes:
- Add `QueryResult` wrapper for C API marshaling
- Replace Connection::execute*() methods with query() returning
`QueryResult`
- Implement result extraction via `TryFrom`
- Remove duckdb-rs fork dependency
- Update tests to use new interface

Signed-off-by: Alexander Droste <[email protected]>
Signed-off-by: mwlon <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Release label indicating a trivial change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants