Démarrage
Premier Breakout

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

  1. Se connecter à CSWeb
http://localhost:8080
  1. Aller dans "Dictionaries"
  • Menu : Data Dictionaries
  1. Upload d'un dictionnaire
  • Cliquer sur Upload Dictionary
  • Sélectionner votre fichier .dcf (CSPro dictionary)
  • Exemple : EVAL_PRODUCTEURS_USAID.dcf
  • Cliquer sur Upload
  1. 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
\dn

Pour 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_PASSE

Option 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=3

Sortie 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 secondes

Via 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)

  1. Ouvrir pgAdmin
http://localhost:8082
  1. Se connecter au serveur
  • Host : postgres
  • Port : 5432
  • Database : csweb_analytics
  • Username : csweb_analytics
  1. Explorer le schéma
  • Naviguer vers : Servers postgres Databases csweb_analytics Schemas eval_producteurs Tables
  1. 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

  1. Ouvrir Power BI Desktop
  2. Get Data PostgreSQL
  3. Entrer les paramètres :
  • Server : localhost:5432
  • Database : csweb_analytics
  • Username : csweb_analytics
  • Password : [POSTGRES_PASSWORD]
  1. Sélectionner les tables du schéma eval_producteurs
  2. Créer vos visualisations !

Tableau

  1. Ouvrir Tableau Desktop
  2. Connect PostgreSQL
  3. Entrer les paramètres :
  • Server : localhost
  • Port : 5432
  • Database : csweb_analytics
  • Schema : eval_producteurs
  1. 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 POSTGRES

Erreur : "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 csweb

Breakout 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 :

  1. Vérification Complète - Checklist de vérification de l'installation
  2. Breakout Sélectif Avancé - Breakout automatique, scheduler, monitoring
  3. Configuration Multi-DB - Basculer entre PostgreSQL, MySQL, SQL Server
  4. 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 :

En savoir plus sur l'architecture