Skip to main content
Bijection runs your app’s transactions, queries, operations and maps. Bulk and specialist computation runs in your own infrastructure: model training, simulations, spatial joins over millions of rows, raster tiling, routing and optimization, file conversion. Your job reads datasets at exact snapshots, writes its result to a table in your own catalog, and submits it. Bijection checks the result before your app sees it.

Declare the result

An external dataset declares the result’s columns and their stable field IDs:
bijection/coverage.ts
Bind it to the table your job writes. Bijection records the table but never creates or writes it; a keyed dataset names 1 to 32 logical buckets:

Give your job a producer grant

Mount the producer route on your HTTP router:
bijection/http.ts
Then issue a grant for the datasets the job produces. The token is printed once:
A grant names at most 16 datasets and lasts at most 30 days. It authorizes only describing those datasets, submitting their snapshots and, if your app declares them, recording their map archives.

Submit a snapshot

Your job writes one snapshot of the bound table and submits its ID, naming the dataset versions it read as provenance. The example producer (examples/iceberg-consumers/bijection_producer.py) does this in Python with PyIceberg:
Bijection accepts the snapshot as the dataset’s next version only if:
  • the table names the dataset in its bijection.dataset table property and is the same table earlier versions came from;
  • the snapshot’s schema is exactly the declared fields at their field IDs, types and nullability;
  • its files carry no delete files;
  • a keyed snapshot holds each key once.
Otherwise the submission is refused with the reason, and the dataset keeps its current version. A dataset with markings must carry every marking of its provenance. Retrying with the same key returns the same submission, so a lost reply is safe.

Use the result in your app

A collection sync keeps one of your collections equal to the latest accepted version, admitting every geometry and computing its spatial index cell; see geospatial data. For a keyed result that should arrive as incremental changes, a synced table can read it through a dataset reader that you run next to your lake, with a reader grant (bijection dataset grant reader).