Ce projet simule un workflow complet de Data Engineering et Data Analytics pour l’entreprise fictive VéloCity, un service de vélos en libre-service. L’objectif consiste à :
- Explorer et comprendre les données brutes via OpenMetadata
- Construire un modèle analytique propre en PostgreSQL selon l’architecture Médaillon (Raw → Silver → Gold)
- Créer un Dashboard Marketing dans Metabase
- Mettre en place la gouvernance et la sécurité des données, via le principe du moindre privilège
| Outil / Technologie | Utilisation |
|---|---|
| OpenMetadata | Catalogue, documentation, découverte des sources |
| PostgreSQL | Stockage, transformations Raw → Silver → Gold |
| pgAdmin | Connexion et requêtes SQL |
| Metabase | Dashboard & visualisation |
| Docker | Déploiement de l’environnement (OpenMetadata) |
OpenMetadata
│
┌───────────┴───────────┐
│ Analyse & Documentation │
└───────────┬───────────┘
│
PostgreSQL
┌──────────────────────┼─────────────────────────┐
│ │ │
RAW SILVER GOLD
(Données brutes) (Nettoyage, typage, règles) (Tables métier prêtes BI)
│ │ │
└──────────────────────┴───────────────┐
│
Metabase
(Dashboard final)
Vous trouverez dans le livrable Partie 1 : ✔ Liste des tables identifiées ✔ Schémas, documentation & data profiling ✔ Classification tables de faits / dimensions ✔ Justification du choix des sources
Tables retenues :
| Table | Type | Rôle |
|---|---|---|
bike_rentals |
Fait | Table centrale pour les trajets |
user_accounts |
Dimension | Infos utilisateurs / abonnement |
subscriptions |
Dimension | Types d’abonnements |
bikes |
Dimension | Infos sur la flotte |
bike_stations |
Dimension | Réseau de stations |
cities |
Dimension | Localisation (ville / région) |
Ces tables couvrent tous les besoins analytiques du Marketing.
-
Créer un schéma analytique :
analytics_nom1_nom2 -
Construire :
- Silver → tables nettoyées
- Gold → tables agrégées
Le fichier script.sql contient :
CREATE SCHEMA analytics_nom1_nom2;💡 Nettoyages réalisés :
- Conversion des dates
text→timestamp - Calcul de
duration_minutes - Filtrage des trajets < 2 minutes (tests)
- Standardisation des ID / formats
- Suppression valeurs aberrantes (cohérence temporelle)
- Normalisation des abonnements
Chaque table Raw → Silver possède sa requête INSERT avec correction.
Création de la table centrale :
analytics_nom1_nom2.gold_daily_activity
Elle contient :
total_rentalsaverage_duration_minutesunique_users- Par jour, ville, station, type de vélo, type d’abonnement
Un Dashboard intitulé :
contient :
- X : jour
- Y : total_rentals
- tri décroissant sur total_rentals
- average_duration_minutes
📎 Capture d’écran fournie dans le livrable Partie 3.
Objectif : appliquer le principe du moindre privilège.
| Schéma | Accès | Raison |
|---|---|---|
| raw | ❌ Interdit | Données sensibles |
| silver | ❌ Interdit | Données semi-clean mais non anonymisées |
| gold | ✅ Lecture seule | Données propres, anonymisées, prêtes BI |
REVOKE ALL ON SCHEMA raw FROM marketing_user;
REVOKE ALL ON ALL TABLES IN SCHEMA raw FROM marketing_user;
GRANT USAGE ON SCHEMA analytics_nom1_nom2 TO marketing_user;
GRANT SELECT ON analytics_nom1_nom2.gold_daily_activity TO marketing_user;Objectif : ne voir que les données de Lyon.
Extrait du script :
CREATE ROLE manager_lyon LOGIN;
GRANT USAGE ON SCHEMA analytics_nom1_nom2 TO manager_lyon;
GRANT SELECT ON analytics_nom1_nom2.gold_daily_activity TO manager_lyon;
ALTER TABLE analytics_nom1_nom2.gold_daily_activity
ENABLE ROW LEVEL SECURITY;
CREATE POLICY city_lyon_policy
ON analytics_nom1_nom2.gold_daily_activity
FOR SELECT
TO manager_lyon
USING (city_name = 'Lyon');| Partie | Livrable | Format |
|---|---|---|
| Partie 1 | Analyse OpenMetadata | Markdown / PDF |
| Partie 2 | Script complet SQL | .sql |
| Partie 3 | Dashboard Metabase | Capture d’écran |
| Partie 4 | GRANT / REVOKE (+ RLS) | Dans le script SQL |
👤 Llodra Dylan 👤 Braure Axel