Skip to content
Learni
View all tutorials
Bases de données

Comment créer un data warehouse simple en 2026

Introduction

Un data warehouse centralise les données de votre entreprise pour l'analyse. Contrairement à une base transactionnelle, il est optimisé pour les requêtes complexes et l'historisation. Ce tutoriel vous guide pas à pas pour créer un data warehouse simple avec PostgreSQL en 2026.

Prérequis

  • PostgreSQL 16+
  • Connaissances SQL de base
  • Python 3.11+
  • Docker Desktop installé

Lancer PostgreSQL avec Docker

terminal
docker run --name dw-postgres -e POSTGRES_PASSWORD=secret -p 5432:5432 -d postgres:16

Cette commande démarre un conteneur PostgreSQL persistant. Le port 5432 est exposé pour les connexions locales.

Créer la base et le schéma en étoile

schema.sql
CREATE DATABASE datawarehouse;
\c datawarehouse;

CREATE TABLE dim_client (
  client_id SERIAL PRIMARY KEY,
  nom VARCHAR(100),
  ville VARCHAR(50)
);

CREATE TABLE dim_produit (
  produit_id SERIAL PRIMARY KEY,
  nom VARCHAR(100),
  categorie VARCHAR(50)
);

CREATE TABLE fact_ventes (
  vente_id SERIAL PRIMARY KEY,
  client_id INT REFERENCES dim_client(client_id),
  produit_id INT REFERENCES dim_produit(produit_id),
  montant DECIMAL(10,2),
  date_vente DATE
);

Nous créons une structure en étoile classique : deux dimensions et une table de faits. Cela optimise les jointures analytiques.

Script ETL simple en Python

etl.py
import psycopg2
conn = psycopg2.connect("host=localhost dbname=datawarehouse user=postgres password=secret")
cur = conn.cursor()
cur.execute("INSERT INTO dim_client (nom, ville) VALUES ('Jean Dupont', 'Paris');")
cur.execute("INSERT INTO dim_produit (nom, categorie) VALUES ('Laptop', 'Informatique');")
cur.execute("INSERT INTO fact_ventes (client_id, produit_id, montant, date_vente) VALUES (1, 1, 999.99, '2026-01-15');")
conn.commit()
cur.close()
conn.close()

Ce script insère des données de test dans les tables. En production, remplacez les valeurs par des données extraites de sources externes.

Requête d'analyse

analyse.sql
SELECT 
  dc.ville,
  dp.categorie,
  SUM(fv.montant) AS total_ventes
FROM fact_ventes fv
JOIN dim_client dc ON fv.client_id = dc.client_id
JOIN dim_produit dp ON fv.produit_id = dp.produit_id
GROUP BY dc.ville, dp.categorie
ORDER BY total_ventes DESC;

Cette requête agrège les ventes par ville et catégorie. Elle exploite la structure en étoile pour des performances optimales.

Configuration du fichier .env

.env
DB_HOST=localhost
DB_PORT=5432
DB_NAME=datawarehouse
DB_USER=postgres
DB_PASSWORD=secret

Stockez les identifiants de connexion dans un fichier .env pour éviter de les hardcoder dans le code source.

Bonnes pratiques

  • Utilisez toujours des clés primaires surrogates
  • Séparez les données brutes (staging) des données modélisées
  • Documentez chaque table et colonne
  • Automatisez les chargements ETL avec des outils comme Airflow

Erreurs courantes à éviter

  • Oublier les index sur les clés étrangères
  • Charger des données sans nettoyage préalable
  • Utiliser des types de données trop génériques (TEXT au lieu de VARCHAR)
  • Ignorer la gestion des dates et des fuseaux horaires

Pour aller plus loin

Découvrez nos formations Learni sur la data engineering et les data warehouses avancés.