Premier Breakout - Tutorial Step-by-Step Ce tutorial vous guide pas à pas pour réaliser votre premier breakout avec CSWeb Community Platform.
Qu'est-ce que le Breakout ?
Le breakout est le processus de transformation des données CSPro (format binaire .csdb) en tables SQL relationnelles pour permettre l'analyse et le reporting.
Avant le Breakout
Base CSWeb (MySQL)
cases.csdb (binaire)
- Case 1
- Case 2
- Case 3
...
Après le Breakout
Base Analytics (PostgreSQL)
eval_producteurs (table)
- id, nom, region, ...
eval_observations (table)
- id, producteur_id, ...
eval_photos (table)
- id, observation_id, ...
Étape 1 : Uploader un Dictionnaire CSPro
Via l'Interface Web
- Se connecter à CSWeb
http://localhost:8080- Aller dans "Dictionaries"
- Menu :
DataDictionaries
- Upload d'un dictionnaire
- Cliquer sur
Upload Dictionary - Sélectionner votre fichier
.dcf(CSPro dictionary) - Exemple :
EVAL_PRODUCTEURS_USAID.dcf - Cliquer sur
Upload
- Vérifier l'upload
- Le dictionnaire doit apparaître dans la liste
- Noter l'ID du dictionnaire (ex:
3)
Via l'API
# Upload via API (avancé)
curl -X POST http://localhost:8080/api/dictionaries/upload \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "file=@EVAL_PRODUCTEURS_USAID.dcf"Étape 2 : Configurer la Base de Données Breakout
Créer le Schéma de Destination
Pour PostgreSQL (recommandé) :
# Se connecter à PostgreSQL
docker compose exec postgres psql -U csweb_analytics -d csweb_analytics
# Créer un schéma pour le dictionnaire
CREATE SCHEMA IF NOT EXISTS eval_producteurs;
# Vérifier
\dnPour MySQL :
# Se connecter à MySQL
docker compose exec mysql mysql -u csweb_user -p
# Créer une base pour le dictionnaire
CREATE DATABASE IF NOT EXISTS eval_producteurs;
# Vérifier
SHOW DATABASES;Configurer la Connexion Breakout
Option 1 : Via fichier .env
# Base par défaut pour le breakout
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DATABASE=csweb_analytics
POSTGRES_USER=csweb_analytics
POSTGRES_PASSWORD=VOTRE_MOT_DE_PASSEOption 2 : Via API (par dictionnaire)
curl -X POST http://localhost:8080/api/dictionaries/3/breakout-config \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dbType": "postgresql",
"host": "postgres",
"port": 5432,
"database": "csweb_analytics",
"schema": "eval_producteurs",
"user": "csweb_analytics",
"password": "VOTRE_MOT_DE_PASSE"
}'Étape 3 : Lancer le Breakout
Via CLI (Recommandé)
# Se connecter au container CSWeb
docker compose exec csweb bash
# Lancer le breakout sélectif
php bin/console csweb:process-cases-by-dict EVAL_PRODUCTEURS_USAID
# Ou avec l'ID du dictionnaire
php bin/console csweb:process-cases-by-dict --dict-id=3Sortie attendue :
Breakout Sélectif CSWeb
=======================
Dictionnaire: EVAL_PRODUCTEURS_USAID (ID: 3)
Base cible: PostgreSQL (postgres:5432)
Schéma: eval_producteurs
[1/5] Création des tables...
[2/5] Extraction des cases... (125 cases)
[3/5] Transformation des données...
[4/5] Insertion dans PostgreSQL... (125 lignes)
[5/5] Création des index...
Breakout terminé avec succès !
Durée: 12.5 secondesVia API
# Déclencher le breakout via API
curl -X POST http://localhost:8080/api/breakout/EVAL_PRODUCTEURS_USAID/trigger \
-H "Authorization: Bearer YOUR_TOKEN"
# Vérifier le statut
curl http://localhost:8080/api/breakout/EVAL_PRODUCTEURS_USAID/status \
-H "Authorization: Bearer YOUR_TOKEN"Via Admin Panel (À venir)
L'interface React Admin Panel permettra de déclencher les breakouts en 1 clic (roadmap v1.5).
Étape 4 : Vérifier les Tables Créées
Avec pgAdmin (PostgreSQL)
- Ouvrir pgAdmin
http://localhost:8082- Se connecter au serveur
- Host :
postgres - Port :
5432 - Database :
csweb_analytics - Username :
csweb_analytics
- Explorer le schéma
- Naviguer vers :
ServerspostgresDatabasescsweb_analyticsSchemaseval_producteursTables
- Vérifier les tables créées
producteurs(table principale)observations(table enfant)photos(table enfant)- etc.
Avec SQL
PostgreSQL :
-- Lister les tables du schéma
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'eval_producteurs';
-- Compter les lignes
SELECT COUNT(*) FROM eval_producteurs.producteurs;
-- Voir un échantillon de données
SELECT * FROM eval_producteurs.producteurs LIMIT 10;MySQL :
-- Lister les tables
SHOW TABLES FROM eval_producteurs;
-- Compter les lignes
SELECT COUNT(*) FROM eval_producteurs.producteurs;
-- Voir un échantillon
SELECT * FROM eval_producteurs.producteurs LIMIT 10;Étape 5 : Requêter les Données
Maintenant que les données sont breakées, vous pouvez les requêter avec SQL :
Exemples de Requêtes
Compter les producteurs par région :
SELECT region,
COUNT(*) as total_producteurs
FROM eval_producteurs.producteurs
GROUP BY region
ORDER BY total_producteurs DESC;Joindre producteurs et observations :
SELECT p.nom_producteur,
p.region,
o.type_culture,
o.rendement
FROM eval_producteurs.producteurs p
JOIN eval_producteurs.observations o ON p.producteur_id = o.producteur_id
WHERE p.region = 'Dakar';Analyser les observations avec photos :
SELECT p.nom_producteur,
COUNT(ph.photo_id) as nombre_photos
FROM eval_producteurs.producteurs p
LEFT JOIN eval_producteurs.photos ph ON p.producteur_id = ph.producteur_id
GROUP BY p.nom_producteur
HAVING COUNT(ph.photo_id) > 0;Étape 6 : Connecter à un Outil de BI
Power BI
- Ouvrir Power BI Desktop
- Get Data PostgreSQL
- Entrer les paramètres :
- Server :
localhost:5432 - Database :
csweb_analytics - Username :
csweb_analytics - Password :
[POSTGRES_PASSWORD]
- Sélectionner les tables du schéma
eval_producteurs - Créer vos visualisations !
Tableau
- Ouvrir Tableau Desktop
- Connect PostgreSQL
- Entrer les paramètres :
- Server :
localhost - Port :
5432 - Database :
csweb_analytics - Schema :
eval_producteurs
- Drag & drop les tables pour créer vos dashboards
Metabase (Open Source)
# Déployer Metabase avec Docker
docker run -d -p 3001:3000 --name metabase metabase/metabase
# Accéder à Metabase
http://localhost:3001
# Connecter à PostgreSQL CSWeb
Database type: PostgreSQL
Host: host.docker.internal (macOS/Windows) ou [IP_MACHINE] (Linux)
Port: 5432
Database name: csweb_analytics
Username: csweb_analytics
Password: [POSTGRES_PASSWORD]Troubleshooting
Erreur : "Dictionary not found"
Cause : Le nom du dictionnaire est incorrect ou n'existe pas.
Solution :
# Lister tous les dictionnaires disponibles
docker compose exec csweb php bin/console csweb:list-dictionaries
# Utiliser le nom exact
php bin/console csweb:process-cases-by-dict [NOM_EXACT]Erreur : "Database connection failed"
Cause : PostgreSQL n'est pas accessible ou mauvaises credentials.
Solution :
# Vérifier que PostgreSQL tourne
docker compose ps postgres
# Tester la connexion
docker compose exec postgres psql -U csweb_analytics -d csweb_analytics
# Vérifier les variables .env
docker compose exec csweb env | grep POSTGRESErreur : "PDO driver not found"
Cause : Le driver PostgreSQL n'est pas installé dans le container.
Solution :
# Vérifier les drivers disponibles
docker compose exec csweb php bin/console csweb:check-database-drivers
# Si pdo_pgsql est manquant, rebuild le container
docker compose up -d --build cswebBreakout trop lent
Cause : Grand volume de données (>100k cases).
Solutions :
- Utiliser PostgreSQL au lieu de MySQL (plus rapide)
- Activer les indexes après le breakout
- Utiliser le breakout incrémental (roadmap v1.5)
# Créer des index pour accélérer les requêtes
CREATE INDEX idx_producteur_region ON eval_producteurs.producteurs(region);
CREATE INDEX idx_observation_producteur ON eval_producteurs.observations(producteur_id);Prochaines Étapes
Félicitations ! Vous avez réalisé votre premier breakout.
Voici ce que vous pouvez faire ensuite :
- Vérification Complète - Checklist de vérification de l'installation
- Breakout Sélectif Avancé - Breakout automatique, scheduler, monitoring
- Configuration Multi-DB - Basculer entre PostgreSQL, MySQL, SQL Server
- Scheduler - Automatiser les breakouts avec des jobs cron
Crédits
Le breakout sélectif par dictionnaire a été développé par Assietou Diagne (ANSD, Sénégal) et intégré dans CSWeb Community Platform.
Contact :
- Email : siatou.sissi@gmail.com
- LinkedIn : Assiétou Diagne (opens in a new tab)