48.85°N · 2.35°E · Sovereign data platform

Polnor

The European data platform, on your cloud.

Compute, SQL, notebooks and ML on one console, your data, your keys, your jurisdiction. A complete data platform that answers to European law.

/Compute
Search resources⌘K ◖ Cardinal AM

Overview

acme-prod · OVHcloud GRA9

Running now
3active jobs
live · refreshing every 30s
Active compute
6
running instances
GPU hours · MTD
1,284
+18% vs last month
Spend · MTD
€ 9,420
across 3 providers
Running jobs
3
live · refreshing 30s
Recent activity
  • run #4812 succeeded daily-pipeline12:04
  • compute training-a100 started team-ml11:58
  • table acme.sales.orders compacted spark11:30
  • model churn-v3 v7 registered you10:12
  • warehouse analytics auto-stopped system09:40

Workspace

git · acme/analytics · branch main

Commit
▾ notebooks
▸ pipelines
▸ data
ingest.py
1
2
3
4
5
import polnor as pl

df = pl.read("acme.sales.orders")
clean = df.dropna().filter(pl.col("amount") > 0)
clean.write("acme.sales.orders_clean")
▶ Interpreter · python 3.11 · kernel on training-a100
>>> clean.shape (1_284_902, 5) >>> clean.write("acme.sales.orders_clean") [ok] 1,284,902 rows written · 0.9s · Spark
1
2
3
CREATE OR REPLACE TABLE acme.sales.daily AS
SELECT date_trunc('day', created_at) d, sum(amount) total
FROM acme.sales.orders_clean GROUP BY 1;
▶ Interpreter · warehouse analytics
>>> run transform.sql [ok] 184 rows · 0.4s · Spark write
1
2
3
4
from polnor import mlflow
with mlflow.start_run(experiment="churn-v3"):
    model.fit(X, y)
    mlflow.log_metric("auc", 0.934)
▶ Interpreter · kernel on training-a100
>>> model.fit(X, y) epoch 12/12 · loss 0.081 [ok] logged auc=0.934 to run_8f2a

Notebooks

git-backed · branch main

+ New notebook
[1]
import polnor as pl
df = pl.read("acme.sales.orders")
[2]
df.groupby("customer_id").amount.sum()
customer_id amount
1042 42,019.50
1077 18,402.10
[3]
from polnor import mlflow
mlflow.log_metric("auc", 0.934)

SQL Editor

DuckDB reads · Spark writes · warehouse: analytics

1
2
3
SELECT customer_id, sum(amount) AS total
FROM acme.sales.orders
GROUP BY 1 ORDER BY total DESC LIMIT 3;
Press Run to execute on your warehouse

Catalog Explorer

Apache Iceberg · Lakekeeper

▾ acme
▾ sales
▦ orders1.28 M
▦ customers84.0 K
▦ line_items9.02 M
▸ web
acme.sales.orders
iceberg1.28 M rowssnapshot 3821
ColumnType
idBIGINT
customer_idBIGINT
amountDECIMAL(10,2)
currencySTRING
created_atTIMESTAMP

Compute

Instances running on your cloud

+ New compute
Active compute
6
running instances
GPU hours · MTD
1,284
+18% vs last month
Spend · MTD
€ 9,420
across 3 providers
Running jobs
3
live · refreshing 30s
NameProviderSpecsStatusRegionAuto-stop
training-a100fine-tuning · team-ml OVH 8× A100 · 96 vCPU running GRA9 ◷ 2h
etl-spark-04nightly pipeline OVH 32 vCPU · 256 GB running GRA9 ◷ 30m
notebook-edaad-hoc analysis SCW 8 vCPU · 32 GB starting SBG5 ◷ 1h
warehouse-biduckdb + spark OVH 16 vCPU · 64 GB stopped GRA9 ◷ never

Jobs

Runs · last 24h

+ New job
run #4812 · started 12:04 · 4m 11s · cron 0 2 * * *
  1. ingest48ssuccess
  2. transform2m 10srunning
  3. reportwaitingpending
run #4810 · started 08:30 · 11m 02s · manual
  1. extract3m 41ssuccess
  2. join5m 02ssuccess
  3. write2m 19ssuccess
run #4807 · started 06:00 · 2m 48s · cron 0 6 * * 1
  1. prep12ssuccess
  2. train attempt 3/32m 30sfailed
  3. evaln/askipped
  4. registern/askipped

Pipelines

daily-metrics · continuous · 4 tables fresh

+ New pipeline
raw_ordersiceberg · 1.2 M raw_customersiceberg · 84 K join_cleandedup · 38s daily_metricsrunning · 1m 12s publish_biwaiting

Model registry

Versioned models & stages

Register model
ModelVersionStageUpdated
churn-v3 v7 Production 10:12
fraud-lgbm v12 Production yesterday
ltv-reg v3 Staging 2 days ago

Experiments

MLflow-compatible tracking

Compare runs
ExperimentBest runMetricProgress
churn-v3 run_8f2a auc 0.934 step 4,200
fraud-lgbm run_1c7d auc 0.971 step 9,800
ltv-reg run_44b0 rmse 12.4 step 2,100

Serving endpoints

Live inference on your cloud

+ New endpoint
EndpointModelStatusQPSp50 latency
churn-prod churn-v3:7 running 142 23 ms
fraud-rt fraud-lgbm:12 running 1,021 8 ms
ltv-batch ltv-reg:3 stopped 0 n/a
control plane, OVHcloud GRA9, France data plane, your VPC · your S3 · your VMs lat 45.7578° · lon 4.8320°

§ 01 · Capabilities

One chart for the
whole data stack.

Iceberg Lakehouse

Open Apache Iceberg tables on your own object storage. ACID, time-travel, schema evolution, no proprietary format, no lock-in.

Lakekeeper REST catalog

SQL warehouses

DuckDB for fast reads, Spark for writes and maintenance. Warehouses spin up on demand on your cloud and stop when idle.

DuckDB · Spark · on-demand VMs

Notebooks & jobs

Git-backed notebooks and multi-task job DAGs with dependencies, retries and per-task timeouts. Logs streamed live.

DAG · retries · live logs

ML & model serving

MLflow-compatible tracking, experiments, model registry and one-click serving endpoints, drop-in Python SDK.

polnor.mlflow · endpoints

Governance & lineage

Per-workspace isolation, audit log with S3 export, column-level lineage captured from every query and run.

audit · lineage · quotas

Bring your own cloud

Your OVH or Scaleway account, your VPC, your bucket, your security groups. We orchestrate; your data never leaves home.

OVH · Scaleway

§ 02 · Architecture

Every source in.
Anywhere out.

Land all your data in one place, shape it however you like, and push it back out, to dashboards, to AI, to the tools your teams already use. This is the platform your data wants.

Ingest from anywhere Transform, model & orchestrate in Polnor Activate to BI, AI, apps & tools

§ 03 · Digital sovereignty

Tout est chez vous.
Everything stays home.

An enterprise-grade data platform that answers to European law, because the data, the keys and the metal are all on this side of the Atlantic.

000°

Data never leaves Europe

Compute and storage run in your own European region, OVHcloud or Scaleway. No transatlantic hop, ever.

060°

Immune to the US Cloud Act

No US-owned entity in the path. FISA 702 and the Cloud Act cannot compel access to infrastructure that isn't theirs.

120°

GDPR by design

Per-workspace isolation, full audit trail, data-residency you can point to on a map. Built for DPOs, not against them.

180°

Your keys, your bucket, your VPC

Credentials encrypted at rest. We orchestrate the control plane; the data plane is entirely yours.

240°

Open formats, no lock-in

Apache Iceberg and Parquet on object storage. Walk away with your tables intact, any day.

300°

Self-hosted everything

Even this website's fonts are self-hosted, not one byte calls a US CDN. Sovereignty is a habit, not a checkbox.

§ Availability

Available where you
already are.

Polnor runs on the European clouds you trust, inside your own account. Pick the provider, pick the region, keep your discounts.

OVHcloud fully supported

The European cloud leader. Polnor's own control plane runs here too.

GRAGravelines · FRSBGStrasbourg · FRDEFrankfurt · DEWAWWarsaw · PL
  • GPU & CPU compute (A100-class)
  • S3-compatible Object Storage
  • SQL warehouses & sidecars
  • Provider billing pull, itemised
Scaleway fully supported

French cloud, Paris-born. Same platform, same console, same guarantees.

fr-parParis · FRnl-amsAmsterdam · NLpl-wawWarsaw · PL
  • GPU & CPU instances
  • S3-compatible Object Storage
  • SQL warehouses & sidecars
  • Region pinning, your project

Another European provider on your shortlist? Tell us, the data plane is built to extend.

§ 04 · Pricing

Pay only for what
you actually use.

To start €0

No subscription, no credit card. Connect your cloud and go.

You pay your cloud

OVH or Scaleway bill you directly for the compute and storage you use.

We add a transparent margin

A clear multiplier on top, itemised against your provider invoice, no surprises.

Billed manually, in euros, by a European entity, invoices you can hand straight to finance.

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.