Onehouse Quanton is a serverless managed Spark compute runtime that delivers 2-3x better price-performance versus AWS EMR and Databricks, with multi-table-format support for Apache Hudi, Apache Iceberg, and Delta Lake.
- Multi-format native - Hudi, Iceberg, and Delta Lake support
- Serverless Spark - No cluster management overhead
- Apache XTable - Cross-format metadata translation
- Cost-efficient - No per-cluster fees, pay-as-you-go compute
- Open standards - 100% Spark SQL compatible
- Onehouse account (onehouse.ai)
- AWS account with S3 access for data staging
- Onehouse API key
pip install requests boto3Install the required dependencies directly. There is no dedicated BenchBox extra for Quanton.
export ONEHOUSE_API_KEY=your-onehouse-api-keybenchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option api_key=your-api-key \
--platform-option s3_staging_dir=s3://your-bucket/benchbox-data \
--platform-option table_format=iceberg| Option | Default | Description |
|---|---|---|
api_key |
(env) | Onehouse API key |
s3_staging_dir |
(required) | S3 path for data staging (e.g., s3://bucket/path) |
region |
us-east-1 | AWS region for cluster deployment |
database |
benchbox | Database name for benchmarks |
table_format |
iceberg | Table format: iceberg, hudi, or delta |
compute_size |
small | Cluster size: small, medium, large, xlarge |
The Hudi settings record_key, precombine_field, and hudi_table_type, and the job timeout_minutes, are
QuantonAdapter keyword arguments in the Python API. The CLI does not accept them. In the Python API, the cluster
size argument is cluster_size.
Quanton supports three open table formats, each with distinct strengths:
| Format | Best For | Key Features |
|---|---|---|
| Iceberg | Enterprise data lakes, multi-engine access | Schema evolution, hidden partitioning, partition evolution |
| Hudi | Streaming workloads, record-level updates | Record-level ACID, incremental processing, efficient upserts |
| Delta | Databricks interop, time travel queries | ACID transactions, unified batch/streaming |
benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://bucket/data \
--platform-option table_format=icebergfrom benchbox.platforms.onehouse import QuantonAdapter
adapter = QuantonAdapter(
s3_staging_dir="s3://bucket/data",
table_format="hudi",
record_key="l_orderkey",
precombine_field="l_shipdate",
)Hudi requires record_key for write operations, and the CLI cannot set it, so run Hudi benchmarks through the Python
API.
benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://bucket/data \
--platform-option table_format=deltabenchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://my-bucket/benchboxbenchbox run --platform quanton --benchmark tpch --scale 10.0 \
--platform-option s3_staging_dir=s3://my-bucket/benchbox \
--platform-option compute_size=medium \
--platform-option table_format=icebergiceberg_result=$(benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://my-bucket/benchbox \
--platform-option table_format=iceberg \
--output ./quanton-iceberg-run --quiet)
delta_result=$(benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://my-bucket/benchbox \
--platform-option table_format=delta \
--output ./quanton-delta-run --quiet)
benchbox compare "$iceberg_result" "$delta_result"The comparison uses the Iceberg run as the baseline. Hudi runs need a record_key, which only the Python API can
set.
from benchbox import TPCH
from benchbox.platforms.onehouse import QuantonAdapter
adapter = QuantonAdapter(
api_key="your-onehouse-api-key",
s3_staging_dir="s3://my-bucket/benchbox-data",
region="us-east-1",
table_format="iceberg",
cluster_size="small",
)
benchmark = TPCH(scale_factor=1.0)
benchmark.generate_data()
adapter.load_benchmark(benchmark)
results = adapter.run_benchmark(benchmark)| Size | Workers | Recommended Scale | Use Case |
|---|---|---|---|
| Small | 1-2 | SF 0.01-1.0 | Development, testing |
| Medium | 2-5 | SF 1.0-10.0 | Standard benchmarks |
| Large | 5-10 | SF 10.0-100.0 | Production workloads |
| XLarge | 10+ | SF 100.0+ | Large-scale analytics |
When using Hudi table format, additional configuration is required. Set it through QuantonAdapter keyword arguments
in the Python API.
The record key uniquely identifies each record for ACID operations. Pass one column or a comma-separated composite key:
QuantonAdapter(s3_staging_dir="s3://bucket/data", table_format="hudi", record_key="l_orderkey,l_linenumber")The adapter applies the same record key to every table it creates.
The precombine field orders records during deduplication:
QuantonAdapter(s3_staging_dir="s3://bucket/data", table_format="hudi", record_key="l_orderkey", precombine_field="l_shipdate")This example uses a date field for ordering.
Choose between COPY_ON_WRITE (faster reads) or MERGE_ON_READ (faster writes):
QuantonAdapter(s3_staging_dir="s3://bucket/data", table_format="hudi", record_key="l_orderkey", hudi_table_type="MERGE_ON_READ")COPY_ON_WRITE is the default and suits analytics workloads. MERGE_ON_READ suits write-heavy workloads.
- No idle cluster costs
- Pay only for compute time used
- Automatic scaling based on workload
Clusters automatically terminate after idle timeout (default: 15 minutes).
Data staged to S3 is reused across runs:
benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://bucket/data
benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://bucket/dataThe first run uploads the data. Subsequent runs skip the upload.
Verify that the API key is valid:
curl -H "Authorization: Bearer $ONEHOUSE_API_KEY" \
https://api.onehouse.ai/v1/healthEnsure your AWS credentials have access to the S3 staging bucket:
aws s3 ls s3://your-bucket/benchbox-data/For large-scale benchmarks, increase the per-query timeout (default 60 minutes) in the Python API:
QuantonAdapter(s3_staging_dir="s3://bucket/data", timeout_minutes=120)Ensure record_key is specified for Hudi format. Without it, BenchBox logs a "No record_key configured" warning and
uses a placeholder key column named <table>_key, which the benchmark tables do not have. Fix it by passing the
record_key argument:
QuantonAdapter(s3_staging_dir="s3://bucket/data", table_format="hudi", record_key="primary_key_column")- Databricks - Alternative lakehouse platform
- Spark - Open-source Spark
- Open Table Formats Guide - Delta, Iceberg, and Hudi comparison
- Platform Comparison - Full platform matrix