Varan Join the beta →
Varan › Schema inference benchmark

Benchmark: schema inference accuracy

Every number here is reproducible. The inputs are public and checksummed, the ground truth comes from somewhere other than us, and the caveats are on this page rather than omitted from it.

The headline

25,000 real GitHub events from the public event stream — a genuinely polymorphic collection, where push, pull-request and issue events share almost no payload structure. Ground truth is every document read, which is definitive by construction. 909 distinct field paths, 346 of them present in under 1% of documents.

MetricSamplingVaran
Fields found79.0%100%
Rare fields missed entirely1540
Mean presence error2.01%0.00%
Variance across 5 random runs0.00%

“Sampling” is the first 500 documents with no server-side scans — what most tools do, and what Varan itself did before this work. Both arms run over identical data.

Review queue on that collection: 17 fields out of 909 needed a human decision.

Schema inference vs published metadata — 41 datasets

OpenML publishes, for every dataset, each feature's declared type, its exact category set and its missing-value count. We strip all of it, load the rows into MongoDB as bare documents, and measure what is recovered. That is ground truth we did not author.

Then the same datasets are run dirty: 3% of numeric values rewritten as text, the way a collection drifts across application versions. That run does not ask “did you guess right” — a type conflict has no single right answer. It asks whether the conflict was surfaced or silently resolved:

1,180 of 1,180 injected conflicts flagged. Zero silently coerced.

Is the confidence meaningful?

An accuracy figure alone is not that useful. What matters is whether the system knows which of its answers to doubt — because that is what makes a short review queue trustworthy. Accuracy, bucketed by the confidence claimed:

Claimed confidenceDecisionsActual accuracy
0.00 – 0.604100%
0.60 – 0.903100%
0.90 – 0.9916100%
0.99 – 1.003,11297.8%

NoSQL → SQL join fidelity

36,273 Wikipedia film documents, with nested cast and genre arrays, joined to the MovieLens movies.csv on title and year through the real pipeline — then scored against a reference join computed straight from the raw files by separate code.

4,644 of 4,644 rows exactly equal. 0 missed, 0 extra, 0 value mismatches.

Data sources

All public, no credentials, every file checksummed:

Caveats

These are on the page for a reason. A benchmark without them is marketing.

What we are not claiming

Not that the impedance mismatch is solved. Discovery — what fields exist, what types they hold, how often — is exact. Interpretation is not, and cannot be: when a field is an integer in most documents and a string in a few, the information needed to decide is not in the data. That residue is real, it is measured, and on the GitHub corpus it came to 17 fields out of 909.

The honest summary is narrower and more useful than “solved”: the guessing has been removed from discovery, and what is left is asked once.

Reproduce it

The benchmark ships in the repository. node benchmark/fetch-data.mjs then node benchmark/run-benchmark.mjs. Inputs and SHA-256 checksums are written to benchmark/data/PROVENANCE.json.

Try it on your own data →