Skip to main content

Managed service · Private beta

Choose how much of your data to read.

Hilbium engines return the best answer that your budget allows, with bounds on how far it can be from the truth — and the exact answer when you ask for all of it. Often the answer is already exact before a single row is read. There is nothing to model first: connect your data and ask.

ZeroScan — approximate analytics

Exact answers to analytical queries, often without reading a single row.

Ask an aggregate question and ZeroScan answers immediately, with bounds around the result. Many queries come back exact at a 0% budget. When they do not, you decide how much of the data it may read to tighten the bounds — and a 100% budget always returns the exact answer.

There is nothing to model first. No pre-aggregated tables, no materialized views, no rollups to design and keep up to date. Point it at your lake and ask the question the business asked this morning, on any combination of filters.

Sums, counts, averages and quantiles come with bounds guaranteed to contain the true value. Distinct counts come with a 95% confidence interval. Every answer states which it is, and whether reading more would improve it.

Measured on ClickBench

Six of the first nine queries are exact without reading any data. Two are within 1.25% of the truth, and their interval contains it. One is not supported yet.

QueryAggregatesAnswer, 0% readDetail
Q0COUNT(*)Exact99,997,497
Q1COUNT(*), filteredExact630,500
Q2SUM, COUNT(*), AVGExact13.3 ms
Q3AVGExact
Q4COUNT(DISTINCT)Bounded−0.64% from the true value
Q5COUNT(DISTINCT)Bounded+1.25% from the true value
Q6MIN, MAXExact5.4 ms
Q7COUNT(*), filtered and groupedExact18 groups, 11.6 ms
Q8COUNT(DISTINCT), groupedNot supported yet
The first nine ClickBench queries on its hits table: 99,997,497 rows, 105 columns, 13.73 GiB of Parquet. Budget set to 0%, so no row is read. Bounded answers were checked against a full count of the source data. Times are medians, measured on 2026-09-20.

ClickBench queries each touch a single column. ZeroScan is built for filters that combine many.

What one query looks like

Request — COUNT(DISTINCT UserID), 0% budget
{
  "version": 3,
  "run": "clickbench",
  "budget": {
    "max_percent": 0
  },
  "aggregates": [
    {
      "op": "approx_count_distinct",
      "column": {
        "path": [
          "UserID"
        ],
        "type": "i64"
      }
    }
  ]
}
Response — abridged
{
  "stage": "best_approx",
  "rows": [
    {
      "group": null,
      "aggregates": [
        {
          "value": 17517824,
          "bounds": {
            "kind": "confidence_interval",
            "confidence": 0.95,
            "lower": 17251779,
            "upper": 17788032
          }
        }
      ]
    }
  ],
  "refinement": {
    "available": false,
    "reason": "best_approx",
    "cumulative_consumed_percent": 0
  }
}

The true count is 17,630,976. The engine also reports that reading more data would not improve this answer, so it does not offer to.

When the budget matters

Raise the budget and the bounds close. Budgets add up: going from 1% to 5% lands exactly where 5% from scratch lands, without reading the first 1% again.

BudgetBoundsWidthTime
0%1,002 – 2,0191,01713.6 ms
1%1,086 – 1,97989321.5 ms
5%1,086 – 1,97989322.7 ms
25%1,408 – 1,65324535.2 ms
50%exact: 1,653047.8 ms
Median of a filtered column —approx_quantile(ResolutionWidth, 0.5) WHERE AdvEngineID <> 0 — on the same table. The estimate never moves; the bounds close around it until the answer is exact.

The same holds for a grouped query: each group gets its own bounds, and they tighten together.

BudgetWidth, 0 passengersWidth, 1 passengerWidth, 2 passengersTime
0%63.702.04617.9559.0 ms
1%41.011.42914.5362.4 ms
5%25.460.7198.68269.9 ms
25%3.5140.1220.71298.5 ms
Average fare by passenger count on NYC Taxi yellow 2024, 41,169,720 trips —SELECT passenger_count, AVG(total_amount) FROM trips GROUP BY passenger_count. Width of the bounds around each group's average, in dollars. All three groups tighten together, by a factor of 17 to 25 between 0% and 25%, while the estimates stay put.

What it supports today

  • COUNT, SUM, AVG, MIN, MAX, COUNT(DISTINCT) and quantiles.
  • Filters combining any number of columns with AND, OR and NOT.
  • GROUP BY up to 1,024 groups.
  • Loads JSONL, CSV, Parquet and other formats.
  • Takes in new data with a refresh, not a full rebuild.
  • No built-in limit on dataset size, only the size of the cloud instance behind it.
  • A JSON API. SQL is on the table if you need it.

Dataset reduction

A smaller dataset, made of your real rows.

Give it a dataset and the size you want, and get back a coreset: a subset of your actual rows, optionally weighted, at that size. Nothing is synthesised.

A random sample of the same size distorts correlations and misses the rare cases. This one comes with two guarantees, and both hold on the same output. Wherever you would take a sample today, use this instead.

  • Covariance preserved

    Correlations between columns survive the reduction, so statistics computed on the subset hold for the whole.

  • Nothing left uncovered

    Every point of the original dataset lies within a bounded distance of a point that was kept. Rare regions keep a representative.

Deployment

A managed service, not software to download.

We run the engines; you call an API. All three products work the same way, and there is nothing to download, install or upgrade on your side.

  1. Today

    Managed by Hilbium

    We host and operate the engines in the cloud. We take your data from your lake, in any supported format, and you query it through a JSON API. There is nothing to install or upgrade.

  2. Planned

    In your own cloud account

    The same service, running inside your cloud account, so your data never leaves your infrastructure. We still operate it.

Fit

Is it for you?

A good fit

  • Large analytical tables where a bounded answer now is worth more than an exact one later.
  • Filtered similarity search over collections too large to keep in memory.
  • Anything that runs on a random sample today.

Not a fit yet

  • Queries that need joins.
  • GROUP BY over more than 1,024 groups.
  • Data that cannot leave your infrastructure, until deployment in your own cloud is available.

Not what it is for

  • Interactive vector search that has to answer in milliseconds.

Private beta

Tell us about your data.

Hilbium is in private beta. Send us a few lines on your dataset and the questions you ask of it, and we will tell you honestly whether it fits.

contact@hilbium.com