Skip to content

Onehouse Quanton Platform

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.

Features

  • 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

Prerequisites

  • Onehouse account (onehouse.ai)
  • AWS account with S3 access for data staging
  • Onehouse API key

Installation

Terminal window
pip install requests boto3

Install the required dependencies directly. There is no dedicated BenchBox extra for Quanton.

Configuration

Terminal window
export ONEHOUSE_API_KEY=your-onehouse-api-key

CLI Options

Terminal window
benchbox 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

Platform Options

OptionDefaultDescription
api_key(env)Onehouse API key
s3_staging_dir(required)S3 path for data staging (e.g., s3://bucket/path)
regionus-east-1AWS region for cluster deployment
databasebenchboxDatabase name for benchmarks
table_formaticebergTable format: iceberg, hudi, or delta
compute_sizesmallCluster 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.

Table Format Selection

Quanton supports three open table formats, each with distinct strengths:

FormatBest ForKey Features
IcebergEnterprise data lakes, multi-engine accessSchema evolution, hidden partitioning, partition evolution
HudiStreaming workloads, record-level updatesRecord-level ACID, incremental processing, efficient upserts
DeltaDatabricks interop, time travel queriesACID transactions, unified batch/streaming

Iceberg (Default)

Terminal window
benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://bucket/data \
--platform-option table_format=iceberg

Hudi

from 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.

Delta Lake

Terminal window
benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://bucket/data \
--platform-option table_format=delta

Usage Examples

Basic Benchmark

Terminal window
benchbox run --platform quanton --benchmark tpch --scale 1.0 \
--platform-option s3_staging_dir=s3://my-bucket/benchbox

Production Benchmark

Terminal window
benchbox 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=iceberg

Cross-Format Comparison

Terminal window
iceberg_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.

Python API

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)

Cluster Sizing

SizeWorkersRecommended ScaleUse Case
Small1-2SF 0.01-1.0Development, testing
Medium2-5SF 1.0-10.0Standard benchmarks
Large5-10SF 10.0-100.0Production workloads
XLarge10+SF 100.0+Large-scale analytics

Hudi-Specific Configuration

When using Hudi table format, additional configuration is required. Set it through QuantonAdapter keyword arguments in the Python API.

Record Key

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.

Precombine Field

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.

Table Type

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.

Cost Optimization

Serverless Benefits

  • No idle cluster costs
  • Pay only for compute time used
  • Automatic scaling based on workload

Cluster Auto-Stop

Clusters automatically terminate after idle timeout (default: 15 minutes).

S3 Data Reuse

Data staged to S3 is reused across runs:

Terminal window
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/data

The first run uploads the data. Subsequent runs skip the upload.

Troubleshooting

Authentication Failed

Verify that the API key is valid:

Terminal window
curl -H "Authorization: Bearer $ONEHOUSE_API_KEY" \
https://api.onehouse.ai/v1/health

S3 Access Denied

Ensure your AWS credentials have access to the S3 staging bucket:

Terminal window
aws s3 ls s3://your-bucket/benchbox-data/

Job Timeout

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)

Hudi Write Failures

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")