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.
| Query | Aggregates | Answer, 0% read | Detail |
|---|---|---|---|
| Q0 | COUNT(*) | Exact | 99,997,497 |
| Q1 | COUNT(*), filtered | Exact | 630,500 |
| Q2 | SUM, COUNT(*), AVG | Exact | 13.3 ms |
| Q3 | AVG | Exact | |
| Q4 | COUNT(DISTINCT) | Bounded | −0.64% from the true value |
| Q5 | COUNT(DISTINCT) | Bounded | +1.25% from the true value |
| Q6 | MIN, MAX | Exact | 5.4 ms |
| Q7 | COUNT(*), filtered and grouped | Exact | 18 groups, 11.6 ms |
| Q8 | COUNT(DISTINCT), grouped | Not supported yet |
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
{
"version": 3,
"run": "clickbench",
"budget": {
"max_percent": 0
},
"aggregates": [
{
"op": "approx_count_distinct",
"column": {
"path": [
"UserID"
],
"type": "i64"
}
}
]
}{
"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.
| Budget | Bounds | Width | Time |
|---|---|---|---|
| 0% | 1,002 – 2,019 | 1,017 | 13.6 ms |
| 1% | 1,086 – 1,979 | 893 | 21.5 ms |
| 5% | 1,086 – 1,979 | 893 | 22.7 ms |
| 25% | 1,408 – 1,653 | 245 | 35.2 ms |
| 50% | exact: 1,653 | 0 | 47.8 ms |
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.
| Budget | Width, 0 passengers | Width, 1 passenger | Width, 2 passengers | Time |
|---|---|---|---|---|
| 0% | 63.70 | 2.046 | 17.95 | 59.0 ms |
| 1% | 41.01 | 1.429 | 14.53 | 62.4 ms |
| 5% | 25.46 | 0.719 | 8.682 | 69.9 ms |
| 25% | 3.514 | 0.122 | 0.712 | 98.5 ms |
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.
On-disk vector search
Nearest-neighbour search without holding the index in memory.
The same budget, applied to similarity search. You say how much of the collection the engine may read; it chooses what to read and returns the best neighbours it can find within that budget. A 100% budget returns the exact nearest neighbours.
The collection does not have to fit in RAM, so you do not pay for the memory it would take. The price is speed: it is slower than an in-memory index.
It is built for work that does not wait on each query — batch jobs, offline retrieval, analysis over a large corpus — not for interactive search.
Filters help instead of hurting
Add a metadata filter — a year, a category, a tenant — and a query reaches good neighbours sooner, not later.
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.
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.
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