Loading...
Cas d’usage · Data & Analytique

Une data lake en Europe,sans facture au téraoctet.

Faire tourner dbt, Airflow, ClickHouse, DuckDB ou Spark sur VPS européen, stocker les events bruts sur object store S3-compatible à 0,10 €/Go/mois, et burst l’entraînement ML la nuit sur un vrai GPU — pas de coût par requête, pas de coût par To scanné, pas de piège egress. Tout le pipeline coûte moins qu’un seul warehouse Snowflake.

§ 01·Le stack · concept

Anatomie d’un pipeline data moderne

Pour toi si…

Ta facture DWH croît plus vite que ta donnée.

Tu ingères des événements, fais tourner des ETL la nuit, entraînes des modèles chaque semaine et livres des dashboards. Chaque DWH cloud facture séparément le scan, le stockage, l’egress — chaque ligne anodine, le total surprenant. Sur VPS + object store, la formule se réduit à « tu paies la box que tu gardes alive ». Prévisible et ~3× moins cher à l’échelle.

Les 5 couches
Object store · raw
Bucket S3-compatible, fichiers Parquet / Iceberg. 0,10 €/Go/mois, pas d’egress dans VMCloud.
Ingestion · stream / batch
Kafka, Vector, Fluentbit sur VPS — écrire les events directement dans des partitions Parquet.
Transformation · dbt + Spark
dbt pour les modèles SQL, Spark / DuckDB pour les gros joins — sur VPS-BUSINESS et au-dessus.
Warehouse · ClickHouse / Postgres
Moteur columnar pour les requêtes analytiques — sub-seconde sur 100 M lignes sur VPS-TITANIUM.
BI · Metabase / Superset
Dashboards self-hosted sur petit VPS — l’équipe possède SQL, dashboards et data.
Ce qui compte
Formats columnar
Parquet + Snappy sur disque = 5 à 10× plus petit que CSV, 50× plus rapide sur scans filtrés.
Partitioning · date / tenant
Partitionner par jour ou par client — la requête ne touche que la slice utile, scan divisé par 100.
ETL idempotent
Les reruns doivent produire le même output — requis pour backfill, retry, audit.
EU residency
Events bruts, modèles, dashboards en régions UE — DPA couvre les obligations RGPD.
Flux data · brut → insight
tous les hops sur VMCloud · pas d’egress
eventsapp · sourcesstreamKafka / Vectorrawobject · ParquetcolumnarClickHouseconsumeMetabase / ML

Chaque hop tourne sur le même réseau VMCloud — Kafka écrit sur S3, ClickHouse lit S3, Metabase requête ClickHouse. Pas d’egress entre eux.

§ 02·Pipeline · concept

Orchestrer l’ETL comme une équipe data senior

Pour toi si…

Tu lis tes DAGs tous les matins.

Une équipe data a besoin de trois primitives : un scheduler, un framework de transformation, un runner de tests. Airflow / Dagster + dbt + dbt-tests couvrent tout. Tout tourne sur un seul VPS-PERFORMANCE pour les petites équipes ; on passe à 3 nœuds quand on dépasse quelques centaines de modèles dbt. Même outillage à chaque étape.

5 étapes ETL
1 · Extract
Extraire depuis Postgres, Stripe, Salesforce — connecteurs Airbyte sur worker VPS.
2 · Load
Charger les lignes brutes en Parquet partitionné sur S3 — sans transformation.
3 · Transform · dbt
Modèles SQL : staging → marts → couche métriques — versionnés dans Git.
4 · Test · dbt-tests
unique, not_null, accepted_values, assertions custom — fail le DAG, pas le dashboard.
5 · Observe
Graph de lineage, freshness, détection d’anomalies sur row counts et drift de métriques.
Garde-fous pipeline
Freshness · par source
Chaque table upstream a un max-age — alerte quand un connecteur meurt en silence.
Delta row count
+/- 10 % vs même jour la semaine dernière déclenche une review — détecte tôt les partitions manquantes.
Lineage drift
Changement de schéma source = modèles downstream notifiés avant le prochain run.
Anomalies de métrique
Drift KPI > 3σ sur baseline 7 j ping le lead data — pas une courbe perdue dans Grafana.
DAG · run ETL quotidien
orchestré par Airflow
postgresstripesalesforceparquet · rawstg_*dbt testmart_revenuemetabase

Sources → lake brut → modèles staging + tests → mart → BI. Airflow lance le DAG chaque nuit, retry les tâches en échec, post sur Slack au rouge.

§ 02·Pipeline · code

Un vrai modèle dbt + DAG Airflow

mart_revenue.sql · incrémental + tests
sql
-- models/marts/mart_revenue.sql
{{ config(materialized='incremental', unique_key='order_id') }}
select
o.order_id,
o.customer_id,
date_trunc('day', o.created_at) as order_date,
o.amount_eur,
c.country
from {{ ref('stg_orders') }} o
join {{ ref('stg_customers') }} c using (customer_id)
where o.status = 'paid'
{% if is_incremental() %}
and o.created_at > (select max(order_date) from {{ this }})
{% endif %}
-- schema.yml
version: 2
models:
- name: mart_revenue
columns:
- name: order_id
tests: [unique, not_null]
- name: amount_eur
tests:
- not_null
- dbt_utils.expression_is_true:
expression: ">= 0"
Stack d’orchestration
sur VPS VMCloud
  • Airflow / Dagster sur VPS-PERFORMANCE
  • Workers Celery / Kubernetes pour les étapes lourdes
  • dbt 1.8+ avec manifest stocké sur S3
  • Événements OpenLineage postés à un service de métadonnées
  • Exporters Prometheus sur chaque worker
  • Slack + email sur fail DAG ou freshness manquée
§ 03·Stockage · concept

Un stockage qui scale comme S3, requête comme une DB

Pour toi si…

Tu scannes plus de data que tu n’en stockes.

Un warehouse 10 To sur Snowflake coûte ~230 € juste pour exister, puis BigQuery / Snowflake facturent par To scanné à chaque requête. Sur VMCloud, 10 To sur STORAGE-NVME coûte 1 500 €/mois et tu le scannes autant que tu veux — l’engine (ClickHouse, DuckDB) lit sur le même réseau sans surcoût.

Formats ouverts
Parquet · file
Columnar, compressé, splittable — format universel lu par tous les moteurs.
Iceberg · table
Ajoute transactions ACID, évolution de schéma, time travel sur des fichiers Parquet.
Delta Lake
Alternative à Iceberg, native Databricks — tourne aussi sur S3 standard.
ClickHouse · MergeTree
Moteur columnar natif — sub-seconde sur 100 M lignes sur un seul VPS-TITANIUM.
Leviers de vitesse
Partitioning
Partitionner par date / tenant — la requête ne touche que 1 % du lake au lieu de 100 %.
Compression · Zstd / Snappy
Zstd-3 = 60 % plus petit que Snappy sans coût lecture sur les scans analytiques.
Vues matérialisées
Pré-agréger les KPIs chauds — le dashboard tape une table de 10 k lignes, pas un scan de 10 G.
Scratch SSD local
Engine sur VPS-NVMe avec 1+ To de scratch — cache les partitions chaudes en sub-ms.
12 mois · stockage cumulé (To)
200 Go/jour · +5 % MoM
m1m3m5m7m9m11100 TB0

Cumul fin d’année : ~96 To. Sur STORAGE-NVME à 0,10 €/Go/mois, facture du dernier mois = 9550 €. L’équivalent Snowflake (Iceberg compressé + frais de scan) est typiquement 3–4× supérieur.

§ 03·Stockage · mesures

Latence requête par taille de warehouse

Requête d’agrégation · group by + sum sur slice filtrée
p50 / p95 mesurés
lignesmoteurVPSp50p95note
10 MDuckDBVPS-PERFORMANCE0.18 s0.6 sidéal analyst seul
100 MDuckDBVPS-BUSINESS0.9 s2.4 ssmall warehouse
1 BClickHouseVPS-TITANIUM1.4 s4.1 sDWH mid-size
10 BClickHouse · 3 nodes3× VPS-TITANIUM3.2 s9.5 sgrosse équipe

Un seul VPS-TITANIUM (128 Go RAM, 32 vCPU) avec ClickHouse tient 1 G de lignes confortablement en analytique. Au-delà, le sharding sur 3 nœuds scale linéairement.

§ 04·Entraînement ML · concept

Burst ML la nuit sur un vrai GPU

Pour toi si…

Tu réentraînes par semaine, pas en continu.

La plupart des équipes data ont besoin de 4 à 8 heures de GPU par semaine — un modèle de churn, un recommender, un détecteur d’anomalies. Les plateformes SaaS ML (Vertex AI, SageMaker) facturent à la seconde de GPU et ajoutent stockage, egress et frais de notebook. Un job nocturne sur GPU-PRO coûte ce que coûtent quelques heures SageMaker — et le GPU reste à toi le reste de la semaine pour de l’ad-hoc.

Run d’entraînement nocturne
1 · Pull features
Lire le dernier mart_features Parquet depuis S3 — sub-minute sur 100 M lignes.
2 · Train
PyTorch / RAPIDS / XGBoost sur GPU-PRO — 4 à 6 h pour un modèle tabulaire sur millions de lignes.
3 · Eval + register
Comparer au modèle de la semaine dernière sur un holdout, register seulement si la métrique progresse.
4 · Ship · MLflow
Nouvelle version push sur registry MLflow ; l’endpoint de serving recharge au prochain deploy.
Leviers de coût
Facturation horaire
Spawn GPU-PRO à minuit, terminate à 06:00 — paie 9 € la run, pas 1 080 € le mois.
RAPIDS · dataframe GPU
cuDF + cuML — 10 à 50× plus rapide que pandas + sklearn sur la même data.
Mixed precision · bf16
Entraîner transformers et modèles DL en bf16 — 2× plus rapide, même précision.
Reprises sur interruption
Checkpoint chaque epoch sur S3 — reprendre l’entraînement depuis le dernier checkpoint sans perdre de temps.
Run ML nocturne · ~5 heures total
GPU-PRO @ 1,50 €/h · ~7 € la run
90 s
4 min
4 h 30
12 min
step 1
spawn GPU-PRO
step 2
pull features
step 3
train · 5 epochs
step 4
eval · register · terminate
§ 05·Coût · concept

Pas de scan par To, pas de surcoût notebook

Trois profils data

Même VPS, taille d’équipe différente.

Analyst seul avec warehouse 1 To : un VPS-BUSINESS + 1 To SSD = 249 €/mois. Équipe data qui passe à 10 To + ETL quotidien : VPS-TITANIUM + 10 To NVMe = ~3 000 €/mois. Équipe ML avec entraînement GPU nocturne : +830 € GPU-PRO. Compare à Snowflake ou Databricks à même taille de data — généralement 2 à 4× plus.

Formule TCO

cost = compute_vps + storage_gb + (gpu_hours × rate)

Trois composants prévisibles. Pas de "credit", pas de "DBU", pas de "slot", pas de frais à la requête. La formule correspond à la box que l’équipe utilise vraiment : un VPS warehouse qui tourne 24/7, un volume de stockage qui grandit chaque mois, et un GPU qu’on allume pour l’entraînement.

Ce que les DWH SaaS cachent
Frais par To scanné
BigQuery : 5 $ par To. La typo d’un junior sur `select * from huge_table` = 40 €.
Les credits compute expirent
Les credits Snowflake expirent — pré-payer plafonne le risque mais gaspille quand même.
Multiplicateur DBU
Databricks facture compute + un surcoût DBU à la seconde de runtime.
Egress à l’export
Récupérer ta propre data : 0,09–0,12 $/Go. Une migration 10 To = 900 €.
Bundles VMCloud · par profil data
tarif public · UE
profilcapacitécomposition€/mo
Analyst seul~1 To warehouse · dbt + MetabaseVPS-BUSINESS · 1 TB STORAGE-SSD249.19
Équipe data~10 To warehouse · ClickHouse + AirflowVPS-TITANIUM · 10 TB STORAGE-NVME2991.93
Entraînement ML~5 To · batch GPU + warehouseVPS-BUSINESS · GPU-PRO · 5 TB STORAGE-NVME1729.83
SaaS analytique managé · tarifs publics
$ / mo · Apr 2026
Snowflake · X-Small warehouse40 h/mo compute+ stockage 23 $/To/mois$ 240
BigQuery · on-demand40 To/mois scannés+ stockage 20 $/To$ 200
Databricks · Standard SQLsmall warehouse+ DBU + stockage$ 350
AWS Athena50 To/mois scannés+ S3 + Glue catalog$ 250
Redshift · ra3.xlpluscluster 24/7+ S3 spectrum$ 1 100

Prix pour une charge "petite équipe data" (warehouse 10 To, 40 h compute/mois, dashboards quotidiens). Les vraies factures ajoutent stockage, compute, scan, DBU, egress. Compter +30–50 %.

Bundle VMCloud vs DWH SaaS · par taille d’équipe
mensuel, comparable
profilVMCloud€/moSaaS le plus proche$/molecture
Analyst · 1 To · dashboards ad-hocAnalyst seul€249BigQuery · light usage · 5 To scannés + stockage$80SaaS gagne
Équipe · 10 To · ETL quotidienÉquipe data€2 992Snowflake · X-Small + storage · 40 h compute + 10 To$420SaaS gagne
Scaleup · 100 To scannés/moisÉquipe data€2 992Databricks · medium SQL · compute + DBU + stockage$1 800SaaS gagne
Équipe ML · 5 To + train GPU nuitEntraînement ML€1 730BigQuery + Vertex AI · scan data + heures GPU$950SaaS gagne

Lecture : un analyst seul à 1 To passe sur BigQuery free tier. L’équation bascule vite — toute équipe avec ETL quotidien à 10 To+ gagne sur VMCloud, et l’écart se creuse à l’échelle parce que le SaaS facture le scan, pas le stockage.

§ 06·Questions

De vraies questions d’équipes data

D’analysts, data engineers et ML leads qui hésitent entre DWH SaaS et self-hosted.

ClickHouse, DuckDB ou Postgres — quel moteur ?

DuckDB pour analyst seul et notebook — tourne in-process, requête Parquet S3 directement. Postgres pour les workloads OLTP-leaning avec peu de lignes. ClickHouse pour OLAP à l’échelle du milliard : columnar, distribué, sub-seconde sur agrégations. Les trois tournent sur VPS-BUSINESS et au-dessus.

Iceberg, Delta ou Parquet pur ?

Parquet pur sur S3 si ton pipeline est append-only et versionné dans Git. Iceberg si tu veux ACID, évolution de schéma, time travel — et requête multi-moteur. Delta Lake si tu es Databricks-heavy. Les trois sont open-source et tournent sur les mêmes buckets STORAGE VMCloud.

Puis-je utiliser dbt-cloud ou je self-host ?

dbt-core est open-source, tu self-host le compilateur et le lances sur VPS — c’est ce qu’on décrit ici. dbt-cloud est la couche SaaS (UI, scheduler, lineage UI) facturée par dev. Tu peux faire l’un ou l’autre ; dbt-cloud sur un warehouse VMCloud marche très bien. La plupart self-hostent à partir de 10+ devs.

Comment migrer depuis Snowflake ?

Trois étapes : dump tes tables en Parquet sur S3 (Snowflake a un COPY INTO), monter un VPS ClickHouse qui lit le Parquet directement, pointer dbt sur le nouveau warehouse. La plupart prennent 2 à 4 semaines ; le SQL dbt demande quelques ajustements (macros Snowflake → ClickHouse). Les frais d’egress Snowflake sont la mauvaise surprise — compter 0,09 $/Go sortant.

RGPD + auditabilité ?

Tous les stockages et compute en régions UE. Les buckets supportent rétention par préfixe, immutabilité et access logs — requis pour audit type SOX. Les colonnes PII peuvent être masquées au niveau warehouse (RBAC ClickHouse) et la suppression sur demande est un simple DELETE si tu partitionnes par user_id.

Requête multi-moteur sans copies ?

Oui — stocker Parquet/Iceberg une seule fois sur S3, le requêter depuis DuckDB (notebook analyst), ClickHouse (warehouse), Spark (ETL lourd) et dataloaders PyTorch (entraînement ML) en même temps. Le lake est la source de vérité ; les moteurs sont des readers stateless. Pas de duplication, pas de logique de sync.

Prêt à posséder ta data ?

Object store + VPS warehouse + GPU à la demande — même Parquet lu par chaque moteur, pas de scan au To, pas de piège egress, données en UE.