diff --git a/datafusion-vortex-partitioned/README.md b/datafusion-vortex-partitioned/README.md index 4842587a95..4b733d6469 100644 --- a/datafusion-vortex-partitioned/README.md +++ b/datafusion-vortex-partitioned/README.md @@ -15,7 +15,7 @@ bash benchmark.sh The shared benchmark harness builds `vortex-datafusion-cli`, downloads the partitioned Parquet files, converts each `partitioned/hits_N.parquet` file into exactly one `vortex/hits_N.vortex` file, and runs the query set. -The `install` script checks out `vortex-datafusion-cli` tag `0.70.0-53.1.0`. CLI tags use `-`, where the first component is the `vortex-datafusion` crate version and the second is the DataFusion/DataFusion CLI version. +The `install` script checks out `vortex-datafusion-cli` tag `0.90.0-55.2.0`. CLI tags use `-`, where the first component is the `vortex-datafusion` crate version and the second is the DataFusion/DataFusion CLI version. You can update/preview the results by running: diff --git a/datafusion-vortex-partitioned/install b/datafusion-vortex-partitioned/install index b312ec1615..7b5aaa6905 100755 --- a/datafusion-vortex-partitioned/install +++ b/datafusion-vortex-partitioned/install @@ -3,7 +3,7 @@ set -e if [ ! -x vortex-datafusion-cli/target/release/vortex-datafusion-cli ]; then # - - CLI_TAG=0.87.0-55.1.0 + CLI_TAG=0.90.0-55.2.0 if ! command -v cargo >/dev/null 2>&1; then curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust-init.sh diff --git a/datafusion-vortex-partitioned/results/20261102/c7a.metal-48xl.json b/datafusion-vortex-partitioned/results/20261102/c7a.metal-48xl.json new file mode 100644 index 0000000000..dfbc20c003 --- /dev/null +++ b/datafusion-vortex-partitioned/results/20261102/c7a.metal-48xl.json @@ -0,0 +1,59 @@ +{ + "system": "DataFusion (Vortex, partitioned)", + "date": "2026-11-02", + "machine": "c7a.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","embedded","stateless"], + "load_time": 51, + "data_size": 12261103120, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.073, 0.003, 0.003], + [0.133, 0.02, 0.02], + [0.146, 0.047, 0.047], + [0.506, 0.032, 0.026], + [0.906, 0.124, 0.139], + [0.708, 0.148, 0.155], + [0.059, 0.002, 0.002], + [0.167, 0.033, 0.035], + [0.907, 0.146, 0.159], + [1.388, 0.285, 0.277], + [0.643, 0.08, 0.061], + [0.912, 0.06, 0.076], + [0.887, 0.125, 0.113], + [2.205, 0.223, 0.235], + [0.848, 0.138, 0.134], + [0.602, 0.12, 0.128], + [2.233, 0.248, 0.242], + [2.149, 0.26, 0.26], + [3.34, 0.37, 0.402], + [0.286, 0.027, 0.041], + [11.417, 0.324, 0.153], + [13.501, 0.179, 0.171], + [17.354, 0.177, 0.175], + [41.755, 0.573, 0.302], + [1.175, 0.034, 0.054], + [0.848, 0.05, 0.063], + [1.382, 0.057, 0.064], + [11.827, 0.217, 0.174], + [9.943, 0.431, 0.416], + [0.163, 0.042, 0.048], + [2.133, 0.138, 0.133], + [5.116, 0.171, 0.184], + [3.603, 0.46, 0.443], + [11.81, 0.387, 0.379], + [11.788, 0.384, 0.379], + [0.291, 0.105, 0.111], + [0.249, 0.067, 0.069], + [0.207, 0.037, 0.044], + [0.202, 0.032, 0.034], + [0.318, 0.126, 0.1], + [0.241, 0.033, 0.028], + [0.243, 0.03, 0.031], + [0.249, 0.028, 0.028] +] +} diff --git a/datafusion-vortex-partitioned/results/20261102/c8g.4xlarge.json b/datafusion-vortex-partitioned/results/20261102/c8g.4xlarge.json new file mode 100644 index 0000000000..acc2a655ec --- /dev/null +++ b/datafusion-vortex-partitioned/results/20261102/c8g.4xlarge.json @@ -0,0 +1,59 @@ +{ + "system": "DataFusion (Vortex, partitioned)", + "date": "2026-11-02", + "machine": "c8g.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","embedded","stateless"], + "load_time": 82, + "data_size": 12261103896, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.049, 0.001, 0.001], + [0.099, 0.011, 0.012], + [0.174, 0.027, 0.026], + [0.58, 0.024, 0.025], + [1.227, 0.195, 0.191], + [1.14, 0.206, 0.205], + [0.043, 0.001, 0.001], + [0.125, 0.015, 0.015], + [1.024, 0.278, 0.28], + [1.796, 0.355, 0.353], + [0.673, 0.058, 0.051], + [1.23, 0.063, 0.061], + [1.421, 0.183, 0.183], + [2.764, 0.281, 0.27], + [1.156, 0.188, 0.187], + [0.881, 0.22, 0.217], + [2.698, 0.465, 0.476], + [2.651, 0.465, 0.476], + [3.833, 0.906, 0.899], + [0.388, 0.014, 0.015], + [12.397, 0.584, 0.296], + [15.354, 0.249, 0.248], + [18.364, 0.285, 0.286], + [14.967, 0.288, 0.282], + [0.264, 0.027, 0.026], + [1.465, 0.05, 0.049], + [0.675, 0.025, 0.025], + [13.424, 0.266, 0.26], + [10.999, 2.103, 2.117], + [0.146, 0.034, 0.033], + [2.615, 0.167, 0.165], + [5.874, 0.152, 0.155], + [4.097, 0.691, 0.682], + [13.273, 0.978, 0.978], + [13.321, 0.986, 0.988], + [0.407, 0.21, 0.21], + [0.169, 0.036, 0.037], + [0.143, 0.022, 0.021], + [0.161, 0.011, 0.011], + [0.238, 0.08, 0.079], + [0.133, 0.011, 0.009], + [0.135, 0.01, 0.009], + [0.139, 0.009, 0.009] +] +} diff --git a/datafusion-vortex-partitioned/results/20261102/c8g.metal-48xl.json b/datafusion-vortex-partitioned/results/20261102/c8g.metal-48xl.json new file mode 100644 index 0000000000..e9fd4c00ec --- /dev/null +++ b/datafusion-vortex-partitioned/results/20261102/c8g.metal-48xl.json @@ -0,0 +1,59 @@ +{ + "system": "DataFusion (Vortex, partitioned)", + "date": "2026-11-02", + "machine": "c8g.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","embedded","stateless"], + "load_time": 52, + "data_size": 12261103896, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.04, 0.002, 0.002], + [0.085, 0.028, 0.034], + [0.097, 0.044, 0.051], + [0.479, 0.052, 0.035], + [1.069, 0.116, 0.114], + [0.984, 0.129, 0.128], + [0.039, 0.002, 0.002], + [0.112, 0.033, 0.033], + [0.865, 0.153, 0.161], + [1.553, 0.229, 0.208], + [0.598, 0.075, 0.076], + [1.101, 0.079, 0.088], + [1.051, 0.117, 0.118], + [2.397, 0.229, 0.225], + [0.774, 0.125, 0.123], + [0.779, 0.115, 0.124], + [2.359, 0.239, 0.242], + [2.016, 0.224, 0.23], + [3.132, 0.393, 0.392], + [0.231, 0.026, 0.023], + [11.465, 0.542, 0.12], + [13.804, 0.193, 0.159], + [17.622, 0.171, 0.176], + [43.417, 0.267, 0.268], + [1.121, 0.039, 0.042], + [1.105, 0.059, 0.051], + [1.609, 0.039, 0.037], + [12.095, 0.18, 0.164], + [10.048, 0.512, 0.524], + [0.114, 0.048, 0.042], + [2.065, 0.113, 0.112], + [5.353, 0.135, 0.137], + [3.779, 0.411, 0.409], + [11.75, 0.486, 0.45], + [11.673, 0.433, 0.463], + [0.248, 0.109, 0.107], + [0.165, 0.057, 0.059], + [0.148, 0.037, 0.04], + [0.164, 0.032, 0.032], + [0.215, 0.091, 0.089], + [0.154, 0.031, 0.031], + [0.157, 0.031, 0.031], + [0.134, 0.031, 0.032] +] +} diff --git a/datafusion-vortex/README.md b/datafusion-vortex/README.md index ed45008536..27a1bfb184 100644 --- a/datafusion-vortex/README.md +++ b/datafusion-vortex/README.md @@ -15,7 +15,7 @@ bash benchmark.sh The shared benchmark harness builds `vortex-datafusion-cli`, downloads `hits.parquet`, converts it to `vortex/hits.vortex`, and runs the query set. -The `install` script checks out `vortex-datafusion-cli` tag `0.70.0-53.1.0`. CLI tags use `-`, where the first component is the `vortex-datafusion` crate version and the second is the DataFusion/DataFusion CLI version. +The `install` script checks out `vortex-datafusion-cli` tag `0.90.0-55.2.0`. CLI tags use `-`, where the first component is the `vortex-datafusion` crate version and the second is the DataFusion/DataFusion CLI version. You can update/preview the results by running: diff --git a/datafusion-vortex/install b/datafusion-vortex/install index b312ec1615..7b5aaa6905 100755 --- a/datafusion-vortex/install +++ b/datafusion-vortex/install @@ -3,7 +3,7 @@ set -e if [ ! -x vortex-datafusion-cli/target/release/vortex-datafusion-cli ]; then # - - CLI_TAG=0.87.0-55.1.0 + CLI_TAG=0.90.0-55.2.0 if ! command -v cargo >/dev/null 2>&1; then curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust-init.sh diff --git a/datafusion-vortex/results/20261102/c7a.metal-48xl.json b/datafusion-vortex/results/20261102/c7a.metal-48xl.json new file mode 100644 index 0000000000..f0df10cedc --- /dev/null +++ b/datafusion-vortex/results/20261102/c7a.metal-48xl.json @@ -0,0 +1,59 @@ +{ + "system": "DataFusion (Vortex, single)", + "date": "2026-11-02", + "machine": "c7a.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","embedded","stateless"], + "load_time": 99, + "data_size": 12263287384, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.098, 0.001, 0.001], + [0.209, 0.021, 0.024], + [0.188, 0.017, 0.021], + [0.441, 0.051, 0.055], + [0.581, 0.126, 0.125], + [0.685, 0.162, 0.168], + [0.083, 0.001, 0.001], + [0.256, 0.027, 0.027], + [0.927, 0.165, 0.164], + [1.282, 0.312, 0.26], + [0.591, 0.076, 0.08], + [0.635, 0.083, 0.086], + [0.759, 0.157, 0.149], + [2.232, 0.251, 0.249], + [0.908, 0.155, 0.155], + [0.533, 0.135, 0.132], + [2.148, 0.259, 0.259], + [2.138, 0.253, 0.252], + [3.286, 0.38, 0.382], + [0.304, 0.034, 0.036], + [10.967, 0.222, 0.205], + [12.878, 0.257, 0.262], + [16.908, 0.319, 0.278], + [45.878, 0.882, 1.15], + [1.679, 0.091, 0.067], + [0.666, 0.067, 0.064], + [1.681, 0.07, 0.074], + [11.352, 0.266, 0.254], + [9.377, 0.447, 0.459], + [0.209, 0.033, 0.032], + [2.032, 0.124, 0.119], + [5.063, 0.153, 0.173], + [3.887, 0.486, 0.43], + [11.314, 0.475, 0.438], + [11.319, 0.467, 0.445], + [0.4, 0.107, 0.104], + [0.356, 0.101, 0.096], + [0.312, 0.063, 0.054], + [0.316, 0.067, 0.064], + [0.422, 0.182, 0.178], + [0.294, 0.033, 0.036], + [0.285, 0.032, 0.034], + [0.281, 0.029, 0.032] +] +} diff --git a/datafusion-vortex/results/20261102/c8g.4xlarge.json b/datafusion-vortex/results/20261102/c8g.4xlarge.json new file mode 100644 index 0000000000..2c7d8e7e10 --- /dev/null +++ b/datafusion-vortex/results/20261102/c8g.4xlarge.json @@ -0,0 +1,59 @@ +{ + "system": "DataFusion (Vortex, single)", + "date": "2026-11-02", + "machine": "c8g.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","embedded","stateless"], + "load_time": 69, + "data_size": 12263286040, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.048, 0.001, 0.001], + [0.109, 0.009, 0.01], + [0.147, 0.028, 0.029], + [0.501, 0.037, 0.041], + [1.119, 0.227, 0.212], + [1.067, 0.315, 0.354], + [0.039, 0.001, 0.001], + [0.125, 0.011, 0.01], + [0.938, 0.32, 0.304], + [1.321, 0.397, 0.424], + [0.583, 0.066, 0.062], + [1.125, 0.072, 0.066], + [1.455, 0.321, 0.306], + [2.55, 0.314, 0.327], + [1.134, 0.296, 0.301], + [0.607, 0.249, 0.249], + [2.629, 0.532, 0.537], + [2.618, 0.544, 0.537], + [3.766, 0.988, 0.94], + [0.34, 0.027, 0.034], + [11.809, 0.521, 0.325], + [15.05, 0.387, 0.389], + [18.208, 0.455, 0.454], + [46.371, 40.346, 39.999], + [2.262, 0.093, 0.088], + [1.33, 0.068, 0.075], + [2.466, 0.09, 0.086], + [13.181, 0.386, 0.411], + [11.039, 2.75, 2.648], + [0.138, 0.034, 0.033], + [2.344, 0.207, 0.224], + [5.583, 0.177, 0.178], + [3.869, 0.749, 0.733], + [12.91, 1.298, 1.229], + [12.936, 1.246, 1.238], + [0.414, 0.227, 0.225], + [0.209, 0.07, 0.07], + [0.173, 0.04, 0.038], + [0.171, 0.033, 0.036], + [0.314, 0.163, 0.166], + [0.15, 0.017, 0.014], + [0.15, 0.012, 0.011], + [0.138, 0.013, 0.014] +] +} diff --git a/datafusion-vortex/results/20261102/c8g.metal-48xl.json b/datafusion-vortex/results/20261102/c8g.metal-48xl.json new file mode 100644 index 0000000000..d48037c5fd --- /dev/null +++ b/datafusion-vortex/results/20261102/c8g.metal-48xl.json @@ -0,0 +1,59 @@ +{ + "system": "DataFusion (Vortex, single)", + "date": "2026-11-02", + "machine": "c8g.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","embedded","stateless"], + "load_time": 102, + "data_size": 12263286040, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.046, 0.001, 0.001], + [0.108, 0.018, 0.017], + [0.122, 0.018, 0.016], + [0.376, 0.035, 0.044], + [0.897, 0.102, 0.108], + [0.95, 0.127, 0.134], + [0.039, 0.001, 0.001], + [0.141, 0.032, 0.031], + [0.794, 0.133, 0.141], + [1.344, 0.205, 0.228], + [0.486, 0.071, 0.071], + [0.925, 0.084, 0.081], + [0.977, 0.128, 0.126], + [2.287, 0.216, 0.227], + [0.83, 0.133, 0.133], + [0.672, 0.101, 0.104], + [2.262, 0.219, 0.217], + [1.979, 0.223, 0.211], + [3.01, 0.381, 0.396], + [0.228, 0.052, 0.032], + [11.23, 0.155, 0.181], + [13.202, 0.247, 0.267], + [16.863, 0.274, 0.274], + [45.734, 1.385, 1.479], + [1.591, 0.064, 0.076], + [0.939, 0.053, 0.054], + [2.014, 0.073, 0.069], + [11.579, 0.225, 0.259], + [9.298, 0.487, 0.479], + [0.143, 0.028, 0.028], + [1.911, 0.11, 0.104], + [5.168, 0.143, 0.144], + [3.774, 0.444, 0.415], + [11.21, 0.479, 0.493], + [11.22, 0.504, 0.43], + [0.453, 0.091, 0.103], + [0.273, 0.079, 0.081], + [0.182, 0.053, 0.052], + [0.2, 0.057, 0.06], + [0.285, 0.158, 0.155], + [0.167, 0.036, 0.037], + [0.161, 0.034, 0.033], + [0.155, 0.033, 0.033] +] +} diff --git a/duckdb-vortex-partitioned/install b/duckdb-vortex-partitioned/install index 9306aac5a4..83d3167e7b 100755 --- a/duckdb-vortex-partitioned/install +++ b/duckdb-vortex-partitioned/install @@ -2,10 +2,15 @@ set -e # Build duckdb-vortex from source. Idempotent. -if [ -x duckdb-vortex/build/release/duckdb ]; then +DUCKDB=duckdb-vortex/build/release/duckdb +if "$DUCKDB" -c "SELECT vortex_version()" >/dev/null 2>&1; then exit 0 fi +# Vortex 0.90.0 on DuckDB v2.0.0. DuckDB's own `INSTALL vortex` ships an +# older Vortex, so build the extension statically into the DuckDB CLI. +DUCKDB_VORTEX_REF=59b149bf38d354951dd078183852ca9ed11cb8d4 + # vcpkg fails the build with `unable to read $HOME` when cloud-init runs # this script with HOME unset. cloud-init.sh.in already exports it, but # stamp HOME locally too so the build works regardless of which @@ -13,7 +18,7 @@ fi export HOME="${HOME:-/root}" sudo apt-get update -y -sudo apt-get install -y ninja-build cmake build-essential make ccache pip clang pkg-config +sudo apt-get install -y ninja-build cmake build-essential make ccache pip clang libclang-dev pkg-config zip unzip if ! command -v cargo >/dev/null 2>&1; then curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ @@ -25,14 +30,25 @@ fi export CC=clang export CXX=clang++ +# On many-core hosts ninja and cargo together run hundreds of compiler +# jobs, which exceeds the default 1024 open-file limit (os error 24). +ulimit -n "$(ulimit -Hn)" 2>/dev/null || true + if [ ! -d duckdb-vortex ]; then - git clone https://github.com/vortex-data/duckdb-vortex --recursive + git clone https://github.com/vortex-data/duckdb-vortex fi ( cd duckdb-vortex - git fetch --tags - git checkout v0.44.0 + git fetch origin "$DUCKDB_VORTEX_REF" + git checkout "$DUCKDB_VORTEX_REF" git submodule update --init --recursive - GEN=ninja NATIVE_ARCH=1 LTO=thin make + # Since DuckDB 2.0 the shell links only the extensions it is told to. + # The extension uses no C++20 modules, and scanning for them needs + # clang-scan-deps, which Ubuntu's clang package does not ship. + EXT_FLAGS='-DSTATICALLY_LINK_EXTENSIONS="core_functions parquet json icu vortex" -DCMAKE_CXX_SCAN_FOR_MODULES=OFF' \ + GEN=ninja NATIVE_ARCH=1 LTO=thin make ) + +# Fail here rather than at load time if vortex did not make it into the shell. +"$DUCKDB" -c "SELECT vortex_version()" diff --git a/duckdb-vortex-partitioned/results/20261102/c7a.metal-48xl.json b/duckdb-vortex-partitioned/results/20261102/c7a.metal-48xl.json new file mode 100644 index 0000000000..0965cdeaba --- /dev/null +++ b/duckdb-vortex-partitioned/results/20261102/c7a.metal-48xl.json @@ -0,0 +1,59 @@ +{ + "system": "DuckDB (Vortex, partitioned)", + "date": "2026-11-02", + "machine": "c7a.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"], + "load_time": 87, + "data_size": 12251457760, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.18, 0.048, 0.043], + [0.217, 0.048, 0.045], + [0.22, 0.073, 0.07], + [0.584, 0.117, 0.112], + [0.61, 0.261, 0.249], + [0.558, 0.36, 0.364], + [0.196, 0.051, 0.049], + [0.231, 0.064, 0.058], + [0.943, 0.301, 0.311], + [1.22, 0.377, 0.345], + [0.621, 0.159, 0.158], + [0.708, 0.172, 0.156], + [0.568, 0.39, 0.378], + [2.007, 0.394, 0.372], + [0.681, 0.303, 0.322], + [0.628, 0.267, 0.275], + [1.945, 0.509, 0.485], + [1.943, 0.505, 0.467], + [3.012, 0.621, 0.617], + [0.28, 0.098, 0.098], + [8.56, 0.531, 0.488], + [13.066, 0.741, 0.758], + [16.711, 0.624, 0.631], + [2.12, 0.244, 0.256], + [0.22, 0.077, 0.083], + [0.514, 0.18, 0.18], + [0.212, 0.073, 0.077], + [11.186, 0.515, 0.566], + [9.255, 1.35, 1.476], + [0.225, 0.115, 0.114], + [1.911, 0.269, 0.27], + [4.921, 0.426, 0.395], + [3.694, 0.837, 0.865], + [11.287, 1.247, 1.305], + [11.261, 1.339, 1.444], + [0.333, 0.221, 0.241], + [0.2, 0.068, 0.067], + [0.178, 0.049, 0.053], + [0.266, 0.06, 0.062], + [0.295, 0.084, 0.093], + [0.256, 0.05, 0.053], + [0.247, 0.055, 0.056], + [0.244, 0.057, 0.058] +] +} diff --git a/duckdb-vortex-partitioned/results/20261102/c8g.4xlarge.json b/duckdb-vortex-partitioned/results/20261102/c8g.4xlarge.json new file mode 100644 index 0000000000..6d72227e25 --- /dev/null +++ b/duckdb-vortex-partitioned/results/20261102/c8g.4xlarge.json @@ -0,0 +1,59 @@ +{ + "system": "DuckDB (Vortex, partitioned)", + "date": "2026-11-02", + "machine": "c8g.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"], + "load_time": 919, + "data_size": 12251458440, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.119, 0.016, 0.016], + [0.198, 0.023, 0.025], + [0.324, 0.03, 0.032], + [0.638, 0.076, 0.077], + [1.033, 0.186, 0.188], + [0.927, 0.193, 0.195], + [0.164, 0.018, 0.019], + [0.209, 0.028, 0.029], + [1.019, 0.23, 0.23], + [1.374, 0.317, 0.331], + [0.722, 0.094, 0.089], + [1.057, 0.103, 0.098], + [1.177, 0.207, 0.21], + [2.48, 0.376, 0.382], + [0.957, 0.25, 0.252], + [0.799, 0.242, 0.232], + [2.357, 0.48, 0.481], + [2.23, 0.381, 0.382], + [3.508, 0.818, 0.834], + [0.36, 0.039, 0.041], + [10.311, 0.335, 0.341], + [14.233, 0.448, 0.445], + [16.877, 0.744, 0.736], + [2.044, 0.141, 0.137], + [0.168, 0.033, 0.034], + [1.238, 0.081, 0.077], + [0.253, 0.035, 0.036], + [12.26, 0.278, 0.281], + [10.006, 2.418, 2.476], + [0.193, 0.041, 0.041], + [2.239, 0.185, 0.19], + [5.418, 0.254, 0.254], + [3.969, 0.872, 0.867], + [12.116, 0.981, 0.979], + [12.12, 1.09, 1.086], + [0.429, 0.203, 0.196], + [0.228, 0.036, 0.032], + [0.168, 0.019, 0.019], + [0.224, 0.032, 0.031], + [0.284, 0.058, 0.057], + [0.181, 0.018, 0.02], + [0.182, 0.018, 0.019], + [0.172, 0.016, 0.016] +] +} diff --git a/duckdb-vortex-partitioned/results/20261102/c8g.metal-48xl.json b/duckdb-vortex-partitioned/results/20261102/c8g.metal-48xl.json new file mode 100644 index 0000000000..757348ea9d --- /dev/null +++ b/duckdb-vortex-partitioned/results/20261102/c8g.metal-48xl.json @@ -0,0 +1,59 @@ +{ + "system": "DuckDB (Vortex, partitioned)", + "date": "2026-11-02", + "machine": "c8g.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"], + "load_time": 82, + "data_size": 12251458440, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.114, 0.034, 0.036], + [0.137, 0.037, 0.047], + [0.156, 0.061, 0.057], + [0.529, 0.109, 0.114], + [0.71, 0.225, 0.241], + [0.494, 0.346, 0.318], + [0.116, 0.032, 0.034], + [0.15, 0.052, 0.051], + [0.892, 0.268, 0.271], + [1.205, 0.318, 0.303], + [0.596, 0.131, 0.125], + [0.75, 0.135, 0.14], + [0.587, 0.318, 0.328], + [1.963, 0.344, 0.329], + [0.655, 0.269, 0.281], + [0.566, 0.266, 0.26], + [1.913, 0.444, 0.415], + [1.925, 0.433, 0.458], + [2.968, 0.584, 0.542], + [0.259, 0.085, 0.073], + [8.795, 0.547, 0.466], + [13.254, 0.679, 0.677], + [16.617, 0.522, 0.5], + [2.066, 0.221, 0.23], + [0.211, 0.073, 0.068], + [0.491, 0.144, 0.144], + [0.195, 0.068, 0.069], + [11.166, 0.481, 0.493], + [9.277, 1.857, 1.811], + [0.199, 0.086, 0.09], + [1.903, 0.231, 0.227], + [4.885, 0.355, 0.351], + [3.656, 0.874, 0.816], + [11.271, 1.198, 1.22], + [11.208, 1.281, 1.24], + [0.442, 0.207, 0.197], + [0.184, 0.052, 0.051], + [0.156, 0.035, 0.042], + [0.179, 0.048, 0.055], + [0.204, 0.067, 0.065], + [0.169, 0.042, 0.038], + [0.166, 0.037, 0.036], + [0.161, 0.043, 0.043] +] +} diff --git a/duckdb-vortex/check b/duckdb-vortex/check index 3c457f3f1e..43c60a61e2 100755 --- a/duckdb-vortex/check +++ b/duckdb-vortex/check @@ -1,4 +1,5 @@ #!/bin/bash set -e -duckdb -c "SELECT 1" >/dev/null +DUCKDB="$(pwd)/duckdb-vortex/build/release/duckdb" +"$DUCKDB" -c "SELECT 1" >/dev/null diff --git a/duckdb-vortex/install b/duckdb-vortex/install index 193fe2e6f8..83d3167e7b 100755 --- a/duckdb-vortex/install +++ b/duckdb-vortex/install @@ -1,19 +1,54 @@ #!/bin/bash set -e -# duckdb writes its extension cache under $HOME/.duckdb/extensions. With -# HOME unset (cloud-init occasionally runs scripts that way) the -# `INSTALL vortex` below ends up writing to /.duckdb and later sibling -# scripts (load/query) can't find the extension. The previous -# `export HOME=${HOME:=~}` was inside the install-duckdb branch, so -# re-runs with duckdb already on PATH still hit the bug. Pin HOME -# unconditionally at the top. +# Build duckdb-vortex from source. Idempotent. +DUCKDB=duckdb-vortex/build/release/duckdb +if "$DUCKDB" -c "SELECT vortex_version()" >/dev/null 2>&1; then + exit 0 +fi + +# Vortex 0.90.0 on DuckDB v2.0.0. DuckDB's own `INSTALL vortex` ships an +# older Vortex, so build the extension statically into the DuckDB CLI. +DUCKDB_VORTEX_REF=59b149bf38d354951dd078183852ca9ed11cb8d4 + +# vcpkg fails the build with `unable to read $HOME` when cloud-init runs +# this script with HOME unset. cloud-init.sh.in already exports it, but +# stamp HOME locally too so the build works regardless of which +# cloud-init template generated the wrapper. export HOME="${HOME:-/root}" -if ! command -v duckdb >/dev/null 2>&1; then - curl https://install.duckdb.org | sh - sudo ln -sf "$HOME/.duckdb/cli/latest/duckdb" /usr/local/bin/duckdb +sudo apt-get update -y +sudo apt-get install -y ninja-build cmake build-essential make ccache pip clang libclang-dev pkg-config zip unzip + +if ! command -v cargo >/dev/null 2>&1; then + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ + | sh -s -- -y --default-toolchain stable --no-modify-path fi +# shellcheck disable=SC1091 +[ -f "$HOME/.cargo/env" ] && source "$HOME/.cargo/env" + +export CC=clang +export CXX=clang++ + +# On many-core hosts ninja and cargo together run hundreds of compiler +# jobs, which exceeds the default 1024 open-file limit (os error 24). +ulimit -n "$(ulimit -Hn)" 2>/dev/null || true + +if [ ! -d duckdb-vortex ]; then + git clone https://github.com/vortex-data/duckdb-vortex +fi + +( + cd duckdb-vortex + git fetch origin "$DUCKDB_VORTEX_REF" + git checkout "$DUCKDB_VORTEX_REF" + git submodule update --init --recursive + # Since DuckDB 2.0 the shell links only the extensions it is told to. + # The extension uses no C++20 modules, and scanning for them needs + # clang-scan-deps, which Ubuntu's clang package does not ship. + EXT_FLAGS='-DSTATICALLY_LINK_EXTENSIONS="core_functions parquet json icu vortex" -DCMAKE_CXX_SCAN_FOR_MODULES=OFF' \ + GEN=ninja NATIVE_ARCH=1 LTO=thin make +) -# Install the vortex extension (idempotent — safe to re-run). -duckdb -c "INSTALL vortex;" +# Fail here rather than at load time if vortex did not make it into the shell. +"$DUCKDB" -c "SELECT vortex_version()" diff --git a/duckdb-vortex/load b/duckdb-vortex/load index 5fa24aacfd..65a90556d2 100755 --- a/duckdb-vortex/load +++ b/duckdb-vortex/load @@ -1,12 +1,14 @@ #!/bin/bash set -e +DUCKDB="$(pwd)/duckdb-vortex/build/release/duckdb" + # Convert source parquet to Vortex format. -duckdb -c "LOAD vortex; COPY 'hits.parquet' TO 'hits.vortex' (FORMAT vortex);" +"$DUCKDB" -c "COPY 'hits.parquet' TO 'hits.vortex' (FORMAT vortex);" # Create the persistent VIEW (over hits.vortex) in hits.db. rm -f hits.db -duckdb hits.db -f create.sql +"$DUCKDB" hits.db -f create.sql # Source parquet no longer needed. rm -f hits.parquet diff --git a/duckdb-vortex/query b/duckdb-vortex/query index 5eef5331ae..424620c395 100755 --- a/duckdb-vortex/query +++ b/duckdb-vortex/query @@ -1,13 +1,14 @@ #!/bin/bash -# Reads a SQL query from stdin, runs it via duckdb against hits.db (a VIEW -# over hits.vortex). The vortex extension is loaded for each invocation. +# Reads a SQL query from stdin, runs it via the custom-built duckdb-vortex +# binary against hits.db (a VIEW over hits.vortex). # Stdout: query result. Stderr: runtime in fractional seconds on the last # line. Exit non-zero on error. set -e +DUCKDB="$(pwd)/duckdb-vortex/build/release/duckdb" query=$(cat) -out=$(duckdb hits.db -c "LOAD vortex;" -c ".timer on" -c "$query" 2>/tmp/duckdb.err.$$) && status=0 || status=$? +out=$("$DUCKDB" hits.db -c ".timer on" -c "$query" 2>/tmp/duckdb.err.$$) && status=0 || status=$? if [ "$status" -ne 0 ]; then cat /tmp/duckdb.err.$$ >&2 diff --git a/duckdb-vortex/results/20261102/c7a.metal-48xl.json b/duckdb-vortex/results/20261102/c7a.metal-48xl.json new file mode 100644 index 0000000000..331d4df010 --- /dev/null +++ b/duckdb-vortex/results/20261102/c7a.metal-48xl.json @@ -0,0 +1,59 @@ +{ + "system": "DuckDB (Vortex, single)", + "date": "2026-11-02", + "machine": "c7a.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"], + "load_time": 715, + "data_size": 12263181188, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.121, 0.019, 0.019], + [0.187, 0.036, 0.038], + [0.222, 0.053, 0.054], + [0.333, 0.143, 0.15], + [0.368, 0.228, 0.227], + [0.504, 0.336, 0.296], + [0.16, 0.038, 0.038], + [0.219, 0.041, 0.042], + [0.713, 0.214, 0.237], + [0.981, 0.276, 0.27], + [0.455, 0.129, 0.214], + [0.509, 0.253, 0.205], + [0.602, 0.212, 0.244], + [1.936, 0.573, 0.387], + [0.649, 0.238, 0.214], + [0.428, 0.253, 0.262], + [1.796, 0.29, 0.279], + [1.823, 0.449, 0.28], + [2.867, 0.389, 0.523], + [0.339, 0.109, 0.09], + [8.692, 0.665, 0.768], + [12.633, 2.075, 1.1], + [16.341, 2.08, 2.084], + [2.233, 0.493, 0.373], + [0.321, 0.092, 0.093], + [0.507, 0.2, 0.245], + [0.312, 0.097, 0.103], + [10.75, 1.638, 0.725], + [8.738, 0.915, 1.039], + [0.271, 0.091, 0.091], + [1.799, 0.293, 0.249], + [4.808, 0.282, 0.275], + [3.601, 0.549, 0.645], + [10.842, 1.091, 2.105], + [10.943, 2.292, 0.964], + [0.399, 0.163, 0.171], + [0.351, 0.151, 0.15], + [0.285, 0.103, 0.104], + [0.33, 0.147, 0.145], + [0.606, 0.458, 0.402], + [0.286, 0.064, 0.06], + [0.296, 0.062, 0.055], + [0.282, 0.059, 0.049] +] +} diff --git a/duckdb-vortex/results/20261102/c8g.4xlarge.json b/duckdb-vortex/results/20261102/c8g.4xlarge.json new file mode 100644 index 0000000000..1de441d765 --- /dev/null +++ b/duckdb-vortex/results/20261102/c8g.4xlarge.json @@ -0,0 +1,59 @@ +{ + "system": "DuckDB (Vortex, single)", + "date": "2026-11-02", + "machine": "c8g.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"], + "load_time": 884, + "data_size": 12263179844, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.115, 0.015, 0.015], + [0.179, 0.024, 0.024], + [0.359, 0.037, 0.036], + [0.497, 0.113, 0.111], + [0.745, 0.21, 0.21], + [0.707, 0.235, 0.235], + [0.159, 0.034, 0.033], + [0.191, 0.027, 0.026], + [0.867, 0.261, 0.263], + [1.147, 0.348, 0.348], + [0.573, 0.106, 0.106], + [0.798, 0.127, 0.129], + [0.978, 0.25, 0.249], + [2.264, 0.441, 0.438], + [0.806, 0.296, 0.299], + [0.627, 0.24, 0.241], + [2.21, 0.582, 0.573], + [2.106, 0.474, 0.469], + [3.423, 0.954, 0.963], + [0.26, 0.049, 0.05], + [10.314, 0.466, 0.507], + [13.231, 0.791, 0.788], + [16.633, 1.337, 1.328], + [1.687, 0.136, 0.134], + [0.217, 0.045, 0.041], + [0.992, 0.131, 0.14], + [0.317, 0.059, 0.057], + [11.579, 0.624, 0.614], + [9.444, 2.703, 2.651], + [0.225, 0.043, 0.043], + [1.999, 0.218, 0.216], + [5.174, 0.274, 0.274], + [3.844, 0.858, 0.869], + [11.568, 1.117, 1.116], + [11.546, 1.237, 1.232], + [0.495, 0.188, 0.18], + [0.269, 0.088, 0.082], + [0.206, 0.054, 0.052], + [0.274, 0.086, 0.08], + [0.425, 0.199, 0.197], + [0.223, 0.033, 0.033], + [0.193, 0.027, 0.027], + [0.193, 0.027, 0.027] +] +} diff --git a/duckdb-vortex/results/20261102/c8g.metal-48xl.json b/duckdb-vortex/results/20261102/c8g.metal-48xl.json new file mode 100644 index 0000000000..fabd5f229e --- /dev/null +++ b/duckdb-vortex/results/20261102/c8g.metal-48xl.json @@ -0,0 +1,59 @@ +{ + "system": "DuckDB (Vortex, single)", + "date": "2026-11-02", + "machine": "c8g.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"], + "load_time": 682, + "data_size": 12263179844, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.125, 0.014, 0.014], + [0.171, 0.025, 0.025], + [0.231, 0.041, 0.041], + [0.409, 0.121, 0.131], + [0.42, 0.181, 0.17], + [0.509, 0.19, 0.212], + [0.144, 0.025, 0.025], + [0.192, 0.03, 0.03], + [0.706, 0.132, 0.156], + [0.972, 0.217, 0.209], + [0.464, 0.197, 0.163], + [0.726, 0.18, 0.169], + [1.036, 0.273, 0.275], + [1.86, 0.456, 0.41], + [0.634, 0.281, 0.285], + [0.436, 0.201, 0.213], + [1.821, 0.225, 0.247], + [1.794, 0.481, 0.265], + [2.849, 0.33, 0.304], + [0.285, 0.093, 0.089], + [8.74, 0.701, 0.66], + [12.586, 1.868, 2.07], + [16.328, 1.584, 1.659], + [2.171, 0.311, 0.313], + [0.256, 0.087, 0.072], + [0.448, 0.167, 0.215], + [0.257, 0.08, 0.094], + [10.764, 1.37, 1.39], + [8.692, 1.678, 1.69], + [0.246, 0.069, 0.069], + [1.772, 0.249, 0.268], + [4.772, 0.424, 0.494], + [3.541, 0.704, 0.394], + [10.843, 0.828, 0.838], + [10.815, 0.843, 0.857], + [0.344, 0.129, 0.139], + [0.304, 0.136, 0.13], + [0.249, 0.081, 0.083], + [0.297, 0.133, 0.131], + [0.545, 0.348, 0.324], + [0.232, 0.05, 0.05], + [0.203, 0.037, 0.045], + [0.204, 0.036, 0.039] +] +}