Définition
Un data warehouse (entrepot de données) est une base de données spécialisée conçue pour l'analyse et le reporting. Il centralise les données provenant de multiples sources (CRM, ERP, bases de production, SaaS) dans un schéma optimise pour les requêtes analytiques.
Contrairement aux bases de données transactionnelles (OLTP), les data warehouses sont optimisées pour la lecture de grands volumes de données (OLAP).
Caracteristiques
- Columnar storage : les données sont stockées par colonnes, pas par lignes. Idéal pour les requêtes analytiques qui lisent quelques colonnes sur des millions de lignes
- Compression : les colonnes de même type se compressent très efficacement
- MPP (Massively Parallel Processing) : les requêtes sont distribuees sur de nombreux nœuds
- Schema-on-write : les données sont structurees et nettoyées avant d'être chargees
- Historique : conservation de l'historique complet pour les analyses de tendances
Solutions populaires
| Solution | Cloud | Prix | Particularite |
|---|---|---|---|
| BigQuery | Pay-per-query | Serverless, SQL standard | |
| Snowflake | Multi-cloud | Crédits | Séparation compute/storage |
| Redshift | AWS | Instance | Intégration AWS native |
| Azure Synapse | Azure | Variable | Intégration Microsoft |
| ClickHouse | Self-hosted/cloud | Open source | Ultra-rapide, temps réel |
Architecture Data Warehouse
Sources → ETL/ELT → Staging → Data Warehouse → Data Marts → BI Tools
↓
dbt (transformations SQL)
↓
Metabase / Looker / Tableau
Data Warehouse vs Data Lake vs Lakehouse
| Data Warehouse | Data Lake | Lakehouse | |
|---|---|---|---|
| Données | Structurees | Brutes (tout format) | Les deux |
| Schéma | Schema-on-write | Schema-on-read | Les deux |
| Moteur | SQL optimise | Spark, Presto | Delta Lake, Iceberg |
| Usage | BI, reporting | ML, exploration | Tout |
| Coût | Eleve | Faible (stockage objet) | Moyen |
| Exemples | BigQuery, Snowflake | S3, GCS | Databricks, Delta Lake |
Modélisation dimensionnelle
Les data warehouses utilisent souvent le schéma en étoile (star schéma) :
- Table de faits : événements mesurables (ventes, clics, commandes)
- Tables de dimensions : contexte (temps, produit, client, geographie)
-- Exemple : chiffre d'affaires par pays et mois
SELECT d.pays, t.mois, SUM(f.montant) as ca
FROM faits_ventes f
JOIN dim_client d ON f.client_id = d.id
JOIN dim_temps t ON f.date_id = t.id
GROUP BY d.pays, t.mois;