Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ log.txt
load_out.txt
server.log
server.pid
server.endpoint
server.endpoint.tmp
arc_token.txt
data-size.txt
.doris_home
Expand Down
6 changes: 0 additions & 6 deletions hyper-parquet/benchmark.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
#!/bin/bash
# Thin shim — actual flow is in lib/benchmark-common.sh.
export BENCH_DOWNLOAD_SCRIPT="download-hits-parquet-partitioned"
export BENCH_RESTARTABLE=no
# Single-process engine: each query forks a fresh full-machine process with no
# shared scheduler across connections, so the concurrent-QPS test only
# oversubscribes RAM rather than measuring throughput. Skip it by default;
# override BENCH_CONCURRENT_DURATION to re-enable. See issue #946.
export BENCH_CONCURRENT_DURATION="${BENCH_CONCURRENT_DURATION:-0}"
exec ../lib/benchmark-common.sh
20 changes: 16 additions & 4 deletions hyper-parquet/check
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
#!/bin/bash
# Readiness probe: connect to the persistent Hyper server (via the descriptor
# ./start published to server.endpoint) and run SELECT 1. Non-zero exit means
# "not up yet" — the benchmark driver polls this in a loop after ./start and
# uses its transition to failing as the "server is really stopped" signal in
# the cold cycle.
set -e

# shellcheck disable=SC1091
source myenv/bin/activate

# No endpoint published => server isn't up.
[ -s server.endpoint ] || exit 1

python3 - <<'PY'
from tableauhyperapi import HyperProcess, Telemetry, Connection
with HyperProcess(telemetry=Telemetry.DO_NOT_SEND_USAGE_DATA_TO_TABLEAU) as hyper:
with Connection(hyper.endpoint) as connection:
connection.execute_list_query("SELECT 1")
from tableauhyperapi import Connection, Endpoint

with open("server.endpoint") as f:
descriptor = f.read().strip()

endpoint = Endpoint(connection_descriptor=descriptor, user_agent="clickbench")
with Connection(endpoint) as connection:
connection.execute_list_query("SELECT 1")
PY
30 changes: 20 additions & 10 deletions hyper-parquet/query
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
#!/bin/bash
# Reads a SQL query from stdin, runs it via tableau hyperapi against the
# partitioned parquet files (registered as a temp external table from
# create.sql).
# Reads a SQL query from stdin, runs it once against the partitioned parquet
# files on the PERSISTENT Hyper server started by ./start (descriptor in
# server.endpoint). The temp external table is (re)created from create.sql
# before the timer starts, so its setup is not counted.
# Stdout: query result.
# Stderr: query runtime in fractional seconds on the last line.
#
# The benchmark driver calls this once per try (BENCH_TRIES). Because every
# call connects to the SAME long-lived server (and the parquet files stay in
# the OS page cache between tries), try 1 (right after the driver's
# stop/drop_caches/start cold cycle) is cold and tries 2..N are genuinely hot.
# See issue #936.
set -e

# shellcheck disable=SC1091
Expand All @@ -18,17 +25,20 @@ cat > "$query_file"
python3 - "$query_file" <<'PY'
import sys
import timeit
from tableauhyperapi import HyperProcess, Telemetry, Connection
from tableauhyperapi import Connection, Endpoint

with open(sys.argv[1]) as f:
query = f.read()

with HyperProcess(telemetry=Telemetry.DO_NOT_SEND_USAGE_DATA_TO_TABLEAU) as hyper:
with Connection(hyper.endpoint) as connection:
connection.execute_command(open("create.sql").read())
start = timeit.default_timer()
rows = connection.execute_list_query(query)
end = timeit.default_timer()
with open("server.endpoint") as f:
descriptor = f.read().strip()

endpoint = Endpoint(connection_descriptor=descriptor, user_agent="clickbench")
with Connection(endpoint) as connection:
connection.execute_command(open("create.sql").read())
start = timeit.default_timer()
rows = connection.execute_list_query(query)
end = timeit.default_timer()

for r in rows:
print(r)
Expand Down
57 changes: 57 additions & 0 deletions hyper-parquet/results/20260630/c6a.2xlarge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"system": "Salesforce Hyper (Parquet)",
"date": "2026-06-30",
"machine": "c6a.2xlarge",
"cluster_size": 1,
"proprietary": "yes",
"hardware": "cpu",
"tuned": "no",
"tags": ["C++","column-oriented","stateless"],
"load_time": 9,
"data_size": 14737666736,
"result": [
[0.847, 0.367, 0.317],
[1.126, 0.391, 0.347],
[1.4, 0.616, 0.636],
[2.35, 0.543, 0.509],
[3.176, 1.523, 1.487],
[3.219, 1.595, 1.509],
[1.071, 0.525, 0.483],
[0.869, 0.411, 0.355],
[3.477, 1.806, 1.803],
[4.339, 2.352, 2.312],
[1.779, 0.525, 0.468],
[1.783, 0.569, 0.549],
[2.293, 1.486, 1.422],
[4.487, 2.536, 2.471],
[2.368, 1.555, 1.555],
[2.353, 1.546, 1.57],
[4.085, 2.61, 2.593],
[4.524, 2.384, 2.433],
[6.829, 5.147, 5.073],
[2.395, 0.382, 0.352],
[10.528, 2.095, 2.07],
[12.01, 2.275, 2.238],
[20.442, 6.167, 6.241],
[48.226, 6.163, 6.642],
[3.793, 1.127, 1.109],
[1.998, 0.982, 1.014],
[3.781, 1.112, 1.156],
[10.704, 2.51, 2.425],
[18.011, 17.04, 16.781],
[9.618, 9.05, 9.074],
[3.916, 1.703, 1.67],
[7.593, 2.016, 1.99],
[9.679, 7.514, 7.472],
[11.325, 3.903, 3.914],
[11.336, 3.95, 3.941],
[2.285, 1.433, 1.462],
[0.889, 0.429, 0.372],
[1.503, 0.417, 0.371],
[0.942, 0.37, 0.33],
[1.131, 0.495, 0.497],
[0.969, 0.311, 0.346],
[0.988, 0.315, 0.346],
[0.969, 0.331, 0.341]
]
}
57 changes: 57 additions & 0 deletions hyper-parquet/results/20260630/c6a.4xlarge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"system": "Salesforce Hyper (Parquet)",
"date": "2026-06-30",
"machine": "c6a.4xlarge",
"cluster_size": 1,
"proprietary": "yes",
"hardware": "cpu",
"tuned": "no",
"tags": ["C++","column-oriented","stateless"],
"load_time": 21,
"data_size": 14737666736,
"result": [
[0.657, 0.292, 0.294],
[0.772, 0.265, 0.269],
[1.258, 0.425, 0.437],
[2.182, 0.363, 0.362],
[2.787, 1.005, 0.979],
[2.889, 0.938, 0.932],
[0.778, 0.362, 0.343],
[0.751, 0.291, 0.284],
[3.047, 1.128, 1.146],
[3.739, 1.374, 1.35],
[2.394, 0.395, 0.333],
[2.247, 0.413, 0.407],
[2.242, 0.884, 0.857],
[3.97, 1.393, 1.432],
[2.289, 0.904, 0.901],
[2.059, 0.992, 1.024],
[3.829, 1.582, 1.59],
[3.711, 1.517, 1.465],
[6.15, 2.973, 3.022],
[1.346, 0.32, 0.304],
[10.512, 1.212, 1.226],
[12.017, 1.314, 1.3],
[20.395, 3.316, 3.333],
[48.211, 4.209, 4.199],
[3.763, 0.719, 0.704],
[2.004, 0.623, 0.626],
[3.763, 0.73, 0.696],
[10.7, 1.407, 1.41],
[9.505, 7.625, 7.817],
[5.284, 4.757, 4.786],
[3.812, 0.991, 0.979],
[7.393, 1.185, 1.178],
[7.914, 4.482, 4.515],
[11.074, 2.51, 2.471],
[11.77, 2.459, 2.464],
[1.69, 0.915, 0.921],
[0.771, 0.339, 0.335],
[0.73, 0.335, 0.348],
[0.767, 0.282, 0.308],
[1.112, 0.433, 0.449],
[0.833, 0.296, 0.25],
[0.863, 0.283, 0.274],
[0.741, 0.287, 0.28]
]
}
57 changes: 57 additions & 0 deletions hyper-parquet/results/20260630/c6a.large.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"system": "Salesforce Hyper (Parquet)",
"date": "2026-06-30",
"machine": "c6a.large",
"cluster_size": 1,
"proprietary": "yes",
"hardware": "cpu",
"tuned": "no",
"tags": ["C++","column-oriented","stateless"],
"load_time": 1,
"data_size": 14737666736,
"result": [
[2.169, 0.85, 0.832],
[2.334, 0.964, 0.941],
[3.583, 1.921, 1.892],
[3.737, 1.536, 1.511],
[7.31, 4.716, null],
[7.577, 5.311, 5.346],
[2.784, 1.424, 1.393],
[2.297, 0.992, 0.954],
[8.149, 5.721, 5.623],
[10.376, 7.372, 7.44],
[4.182, 1.48, 1.472],
[4.163, 1.659, 1.661],
[7.066, 5.025, 5.035],
[36.164, 37.906, 49.875],
[7.427, 5.155, 5.177],
[7.282, 4.856, 4.848],
[72.059, 71.407, 69.517],
[72.527, 35.932, 32.879],
[141.378, 148.188, 144.954],
[3.038, 0.904, 0.914],
[12.314, 7.582, 7.528],
[14.006, 9.733, 8.838],
[33.304, 34.997, 36.306],
[66.348, 71.636, 73.609],
[6.795, 3.814, 3.784],
[5.15, 3.358, 3.324],
[6.958, 3.852, 3.783],
[13.887, 8.938, 9.148],
[69.928, 131.586, 83.562],
[36.88, 35.969, 35.892],
[8.842, 5.472, 5.526],
[12.767, 6.441, 6.679],
[195.523, 196.508, 195.204],
[null, null, null],
[null, null, null],
[6.517, 4.35, 4.288],
[2.104, 0.811, 0.761],
[2.155, 0.812, 0.78],
[1.958, 0.722, 0.703],
[2.348, 0.923, 0.927],
[2.112, 0.709, 0.678],
[2.259, 0.726, 0.685],
[1.922, 0.704, 0.733]
]
}
57 changes: 57 additions & 0 deletions hyper-parquet/results/20260630/c6a.metal.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"system": "Salesforce Hyper (Parquet)",
"date": "2026-06-30",
"machine": "c6a.metal",
"cluster_size": 1,
"proprietary": "yes",
"hardware": "cpu",
"tuned": "no",
"tags": ["C++","column-oriented","stateless"],
"load_time": 64,
"data_size": 14737666736,
"result": [
[0.68, 0.238, 0.24],
[0.792, 0.245, 0.25],
[1.219, 0.284, 0.281],
[1.914, 0.273, 0.273],
[2.037, 0.389, 0.378],
[2.448, 0.446, 0.441],
[0.786, 0.263, 0.264],
[0.804, 0.268, 0.266],
[2.263, 0.428, 0.425],
[3.151, 0.543, 0.546],
[2.12, 0.328, 0.321],
[1.744, 0.313, 0.313],
[2.04, 0.468, 0.442],
[3.4, 0.58, 0.581],
[2.09, 0.482, 0.444],
[1.696, 0.42, 0.417],
[3.406, 0.619, 0.636],
[3.326, 0.566, 0.53],
[5.37, 0.831, 0.844],
[1.34, 0.299, 0.268],
[10.515, 0.501, 0.491],
[11.984, 0.518, 0.541],
[20.361, 0.889, 0.84],
[48.146, 1.71, 1.549],
[3.738, 0.369, 0.385],
[1.954, 0.357, 0.356],
[3.741, 0.376, 0.401],
[10.65, 0.586, 0.598],
[9.313, 2.29, 2.318],
[1.259, 0.916, 0.835],
[3.551, 0.465, 0.452],
[7.075, 0.543, 0.541],
[6.055, 1.129, 1.133],
[10.864, 0.915, 0.884],
[10.896, 0.937, 0.972],
[1.341, 0.381, 0.361],
[0.771, 0.341, 0.335],
[0.718, 0.346, 0.322],
[0.876, 0.282, 0.265],
[1.118, 0.444, 0.402],
[0.662, 0.275, 0.251],
[0.803, 0.259, 0.273],
[0.671, 0.275, 0.291]
]
}
57 changes: 57 additions & 0 deletions hyper-parquet/results/20260630/c6a.xlarge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"system": "Salesforce Hyper (Parquet)",
"date": "2026-06-30",
"machine": "c6a.xlarge",
"cluster_size": 1,
"proprietary": "yes",
"hardware": "cpu",
"tuned": "no",
"tags": ["C++","column-oriented","stateless"],
"load_time": 4,
"data_size": 14737666736,
"result": [
[1.17, 0.49, 0.488],
[1.312, 0.551, 0.524],
[1.866, 1.036, 1.031],
[2.497, 0.826, 0.847],
[3.844, 2.371, 2.526],
[3.891, 2.785, 2.731],
[1.644, 0.775, 0.744],
[1.466, 0.556, 0.545],
[4.258, 3.015, 3.015],
[5.38, 3.958, 3.986],
[2.242, 0.797, 0.778],
[2.387, 0.902, 0.898],
[3.732, 2.553, 2.565],
[6.118, 4.393, 4.339],
[3.907, 2.664, 2.712],
[3.917, 2.607, 2.553],
[6.242, 4.579, 4.591],
[5.958, 4.311, 4.306],
[94.259, 89.972, 94.724],
[1.768, 0.525, 0.522],
[10.538, 3.855, 3.87],
[12.004, 4.12, 4.132],
[20.44, 11.925, 11.879],
[53.704, 53.236, 54.728],
[3.784, 1.978, 1.978],
[2.839, 1.759, 1.719],
[3.773, 2.004, 1.996],
[10.705, 4.559, 4.576],
[34.637, 33.404, 33.052],
[18.629, 17.956, 17.862],
[4.697, 2.935, 2.901],
[7.94, 3.469, 3.405],
[173.433, 172.276, 174.015],
[null, null, null],
[null, null, null],
[3.533, 2.335, 2.442],
[1.369, 0.498, 0.494],
[1.285, 0.541, 0.493],
[1.226, 0.47, 0.456],
[1.485, 0.616, 0.609],
[1.203, 0.431, 0.41],
[1.34, 0.43, 0.445],
[1.206, 0.455, 0.454]
]
}
Loading
Loading