Product · Lakehouse & catalog

One lakehouse. Open format.
Your storage.

All your data as Apache Iceberg tables on your own European bucket: ACID, versioned, catalogued and governed. An open spec underneath, so the day you want to leave, you just take the files.

The anatomy

01

Your bucket

Plain Parquet and Iceberg metadata on your own S3, in your region. The files are yours, physically.

02

Iceberg tables

ACID transactions, snapshots and schema evolution on top of those files. An open spec, not a product.

03

The catalog

Lakekeeper, an Iceberg REST catalog, makes every table addressable as warehouse.namespace.table.

04

The engines

DuckDB reads, Spark writes and maintains. Routed automatically, no engine to pick.

05

Governance

Audit, lineage and per-workspace isolation wrap every access, from the first byte.

acme.sales.orders · warehouse . namespace . table, one address for every dataset

The format

Iceberg does the
hard parts.

ACID transactions

Concurrent writers, atomic commits, no half-written tables. Correctness is the default, not a setting.

Time travel

Every commit is a snapshot. Query yesterday's table, audit a past report, or roll back a bad write in one statement.

Schema evolution

Add, rename or drop columns without rewriting data and without breaking a single downstream query.

Hidden partitioning

Iceberg tracks partitions in metadata. Queries prune automatically; nobody writes partition predicates by hand.

create · write · time-travel
-- create an Iceberg table on your bucket
CREATE TABLE acme.sales.orders (
  id BIGINT, customer STRING,
  amount DECIMAL(10,2), ts TIMESTAMP
) USING iceberg;

-- write: routed to Spark automatically
INSERT INTO acme.sales.orders
SELECT * FROM acme.staging.orders_raw;

-- read yesterday's state: one clause
SELECT sum(amount) FROM acme.sales.orders
FOR TIMESTAMP AS OF '2026-06-11 00:00:00';
snapshot 3821 committed · 1,284,902 rows files: parquet on s3://acme-lakehouse/sales/orders [ok] readable by any Iceberg engine, not just ours

The catalog

Every table, one
searchable map.

01 · Catalog

An Iceberg REST catalog

Lakekeeper catalogues every namespace and table behind a standard REST interface. Polnor speaks it, and so does any other Iceberg-aware engine you own.

02 · Explore

Schema, rows, snapshots

Browse columns and types, preview rows, inspect snapshot history and table properties from the console's Catalog Explorer.

03 · Rewind

Time travel built in

Query any past snapshot, compare states, or roll a table back. Yesterday's report is always reproducible, exactly as it ran.

04 · Leave anytime

No lock-in, structurally

Parquet files and Iceberg metadata on your bucket are the whole product. Stop using Polnor and everything keeps working with any open engine.

The engines

Two engines.
Zero decisions.

Polnor routes every statement to the right engine: DuckDB for fast interactive reads, Spark for writes, merges and table maintenance. You write SQL; the platform does the dispatch.

  • Sub-second reads on DuckDB, straight off Iceberg metadata
  • INSERT, UPDATE, MERGE and DDL handled by Spark
  • Compaction and snapshot expiry scheduled for you
  • Both engines run on a warehouse VM in your cloud, auto-stopped when idle

⬢ Queries execute in your region. Results never transit our infrastructure.

one API, routed automatically
# read → DuckDB
polnor sql "SELECT customer, sum(amount)
            FROM acme.sales.orders GROUP BY 1"

# write → Spark
polnor sql "MERGE INTO acme.sales.orders o
            USING acme.staging.orders_raw r ON o.id = r.id
            WHEN MATCHED THEN UPDATE SET *
            WHEN NOT MATCHED THEN INSERT *"

# → engine: duckdb · 0.4s   |   engine: spark · 11s

Governed by default

A lakehouse your
DPO will sign off.

Audit every access

Every read, write and schema change is logged with actor and timestamp, exportable to your own S3.

Column-level lineage

Trace any column back through every query, job and notebook that produced it.

Workspace isolation

Tables, catalogs and queries are scoped per workspace. The API never crosses tenants.

Automatic maintenance

Compaction and snapshot expiry run on the Spark sidecar, keeping tables fast and storage tidy.

Residency you can prove

Files sit on the bucket and region you chose. Point an auditor at it.

Quotas & cost control

Per-workspace caps on warehouses and compute keep the lakehouse from becoming a bill surprise.

Set a course

Request a
demo.

See your own Iceberg tables, warehouses and notebooks running on your European cloud, usually within a week.

hello@polnor.net · OVHcloud GRA9, France 🇫🇷

Opens your mail client, no data leaves your browser until you hit send.