1. Le paradigme ETL : Extract, Transform, Load

Le pattern ETL constitue l’épine dorsale de la consolidation de données. Il sépare clairement les responsabilités techniques :

  • Extract : Récupération des données depuis les sources opérationnelles (CRM, ERP, logs serveurs, API tierces).
  • Transform : Nettoyage, réconciliation de clés, calcul d’indicateurs et normalisation.
  • Load : Écriture dans le magasin de données cible (Data Warehouse, Data Mart ou base de reporting).

2. Structuration modulaire d’un script ETL en Python

import pandas as pd
import logging
from datetime import datetime

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def extract_sales_data(filepath: str) -> pd.DataFrame:
    logging.info(f"Extraction des données depuis {filepath}")
    return pd.read_csv(filepath)

def transform_sales_data(df: pd.DataFrame) -> pd.DataFrame:
    logging.info("Démarrage des transformations métier...")
    # Nettoyage et typage
    df_clean = df.dropna(subset=['id_client', 'montant']).copy()
    df_clean['date'] = pd.to_datetime(df_clean['date'])
    df_clean['montant_chf'] = df_clean['montant'].astype(float)
    # Calcul de la TVA suisse à 8.1%
    df_clean['tva_chf'] = df_clean['montant_chf'] * 0.081
    df_clean['total_ttc_chf'] = df_clean['montant_chf'] + df_clean['tva_chf']
    return df_clean

def load_to_parquet(df: pd.DataFrame, target_path: str) -> None:
    logging.info(f"Sauvegarde au format optimisé Parquet : {target_path}")
    df.to_parquet(target_path, engine='pyarrow', index=False)
    logging.info("Chargement terminé avec succès.")

# Exécution orchestrée du pipeline
if __name__ == "__main__":
    raw_df = extract_sales_data("ventes_suisse_brutes.csv")
    clean_df = transform_sales_data(raw_df)
    load_to_parquet(clean_df, "datalake/ventes_clean.parquet")

3. Idempotence et tolérance aux pannes

Un pipeline de données professionnel doit être idempotent : exécuter le pipeline deux fois sur la même journée doit produire exactement le même état final sans créer de doublons ni corrompre les métriques historiques.