Share
## https://sploitus.com/exploit?id=947D1B5E-D22B-5348-B95A-F94973DA4080
# đŠ Catalogue Produit UnifiĂ© â Data Pipeline
## đŻ Objectif
Ce projet est un **Proof of Concept (PoC)** visant Ă crĂ©er un pipeline automatisĂ© dâintĂ©gration, transformation et orchestration de donnĂ©es produit issues de **trois systĂšmes hĂ©tĂ©rogĂšnes** :
- **Infor M3**
- **Sage 100**
- **Akeneo**
Lâobjectif final est dâalimenter un **catalogue produit unifiĂ©** (`mart_articles`) dans Snowflake, exploitable par :
- des outils de data visualisation (ex. : **QlikView**)
- des **API B2B/B2C**
- avec une **mise à jour toutes les 15 minutes** (quasi temps réel).
---
## đ§± Architecture Technique
```mermaid
flowchart TD
subgraph Extraction [**Extraction - Talend**]
A1[**Infor M3**M3CS_MITMAS,M3CS_CIDMAS,M3CS_OCUSMA] --> B1[m3_extract.bat]
A2[**Sage 100**F_ARTICLE,F_COMPTET] --> B2[sage_extract.bat]
A3[**Akeneo**PRODUCTS] --> B3[akeneo_extract.bat]
end
subgraph RawZone [**Snowflake - MIG.MPS**]
B1 --> C1[(Raw Tables)]
B2 --> C1
B3 --> C1
end
subgraph Transformation [**Transformation - dbt**]
C1 --> D1[(**STAGING**stg_m3_articles.sqlstg_sage_articles.sqlstg_akeneo_articles.sql)]
D1 --> D2[(**INTERMEDIATE**int_articles.sql)]
D2 --> D3[(**MART**mart_articles.sql)]
end
subgraph Orchestration [**Orchestration - Airflow**]
F1[airflow_poc.py] --> B1
F1 --> B2
F1 --> B3
F1 --> D1
F1 --> D2
F1 --> D3
end
D3 --> G1[**QlikView**]
D3 --> G2[API pour consommation]
```
---
## đ§© Structure du Projet
```text
data-pipeline-poc/
âââ airflow/ # Configuration Airflow + orchestration
â âââ config/ # airflow.cfg ou custom .json
â âââ dags/ # Tous les DAGs Airflow
â â âââ dag_talend_dbt_suppliers.py
â âââ logs/ # Logs Airflow (volume)
â âââ plugins/ # Plugins/hook Airflow
â âââ .env # Variables d'environnement
â âââ docker-compose.yaml # Docker orchestration (webserver, scheduler, etc.)
âââ config/ # Fichiers globaux de configuration
â âââ connections.json # Airflow connections Ă importer
â âââ variables.json # Airflow variables Ă importer
â
âââ dbt/ # Projet dbt (dbt init ...)
â âââ analyses/
â âââ cert/
â âââ docs/
â âââ logs/
â âââ macros/
â âââ models/
â âââ seeds/
â âââ snapshots/
â âââ target/
â âââ tests/
â âââ dbt_project.yml
â âââ README.md
â âââ profiles.yml # (optionnel : via ~/.dbt ou montĂ© dans container)
â
âââ docker/ # Fichiers Docker supplĂ©mentaires
â âââ airflow/ # Dockerfile custom si nĂ©cessaire
â âââ dbt/ # Dockerfile dbt-only (si tu dockerises dbt)
â
âââ scripts/ # Scripts bash / python utilitaires
â âââ init_airflow.sh
â âââ run_talend_job.sh
â
âââ sql/ # Scripts SQL manuels ou tests
â âââ init_snowflake.sql
â
âââ talend_jobs/ # Export ou .bat/.sh des jobs Talend
â âââ m3_extract/
â âââ POC_100_M3_API_LstSuppliers_0.1/
â â âââ POC_100_M3_API_LstSuppliers/
â â âââ POC_100_M3_API_LstSuppliers_run.sh
â âââ POC_100_SNOWFLAKE_CIDMAS_0.1/
â âââ POC_100_SNOWFLAKE_CIDMAS/
â âââ POC_100_SNOWFLAKE_CIDMAS_run.sh
â
âââ README.md
âââ requirements.txt # dĂ©pendances Python globales
âââ .gitignore
```
### Explication de chaque dossier
| Dossier | RĂŽle |
|--------------|--------------------------------------------------------------------------|
| airflow/ | Tout ce qui concerne Airflow : orchestration, configuration, UI |
| talend_jobs/ | Scripts ou exports des jobs Talend (exécutables .bat, .sh ou .jar) |
| dbt/ | Projet dbt complet (transformation SQL dans Snowflake) |
| docker/ | Dockerfiles personnalisés si besoin (par ex. pour dbt ou airflow) |
| sql/ | Fichiers SQL d'initialisation, tests ou débogage |
| config/ | Connexions, variables ou configs réutilisables (JSON, YAML) |
| scripts/ | Utilitaires Bash ou Python pour automatiser certaines étapes |
| .env | Variables globales (Snowflake creds, chemin Talend, etc.) |
### Cycle de données :
- **Talend :** extraction depuis M3, Sage ou Akeneo â fichiers ou DB
- **Airflow :** planification et exécution des .bat Talend ou des .sh
- **Snowflake :** Stockage des donnĂ©es venant de Talend â schĂ©ma STAGING
- **dbt (appelĂ© par Airflow) :** transformation des donnĂ©es â MART
Résultats consultables dans **QlikView** ou exposés par **API**.
**Objectifs :**
---
## đ Fonctionnement du Pipeline
### 1. đč Extraction (Talend)
Des scripts batch déclenchent des jobs Talend pour extraire les données des systÚmes sources :
| Source | Script | Tables extraites |
|----------|-------------------------|--------------------------------------------------|
| Infor M3 | `m3_extract_run.bat` | `M3CS_MITMAS`, `M3CS_CIDMAS`, `M3CS_OCUSMA` |
| Sage 100 | `sage_extract_run.bat` | `F_ARTICLE`, `F_COMPTET` |
| Akeneo | `akeneo_extract_run.bat`| `PRODUCTS` |
Les données sont chargées dans **Snowflake**, schéma **`MIG.MPS`** (zone RAW).
---
### 2. đ§Ș Transformation (dbt)
Les modĂšles dbt effectuent une transformation SQL en trois couches :
**Objectifs :**
Nettoyer, standardiser, enrichir et unifier les données via modÚles SQL dbt répartis dans 3 couches :
#### STAGING : Nettoyage initial (Bronze)
**Nom des modĂšles :**
- stg_m3_articles.sql
- stg_m3_fournisseurs.sql
- stg_m3_clients.sql
- stg_sage_articles.sql
- stg_sage_fournisseurs.sql
- stg_sage_clients.sql
- stg_akeneo_articles.sql
**Opérations typiques :**
- Nettoyage des colonnes (trim, upper, rename, formats).
- Cast des types de données.
- Alignement des formats de clé produit (ex : références, code articles, SKU...).
- Ajout de métadonnées (date chargement, source...).
#### INTERMEDIATE : Fusion et enrichissement (Silver)
**ModĂšle :**
- int_articles.sql
- int_fournisseurs.sql
- int_clients.sql
**Objectifs :**
- Fusion logique entre les différentes sources (match sur clé produit).
- Jointures avec les fournisseurs et clients si pertinent.
- Calculs intermédiaires (statuts, prix consolidés, sources dominantes...).
#### MART : ModÚle final exposé (Gold)
**ModĂšle :**
- mart_articles.sql
- mart_fournisseurs.sql
- mart_clients.sql
**Objectifs :**
- Vue unifiée du catalogue produit.
- PrĂȘte Ă consommation par les outils QlikView et les API.
- Table matérialisée ou vue selon performance/consistance.
#### Fichiers clés :
- `sources.yml` : déclaration des tables RAW
- `profiles.yml` : configuration dbt vers Snowflake via clé PEM
---
### 3. đ ïž Orchestration (Apache Airflow)
Le DAG `airflow_poc.py` orchestre tout le pipeline toutes les **15 minutes** :
```text
extract_m3 â extract_sage â extract_akeneo â dbt_run â dbt_test
```
## âïž Technologies UtilisĂ©es
| Composant | Version | RĂŽle principal |
|------------------|-------------|--------------------------------------------------|
| Python | 3.11.4 | Langage principal pour les scripts et Airflow |
| Talend Open Studio | 8.x | Extraction des données (ETL) |
| dbt Core | 1.x | Transformation des données (SQL Modelling) |
| Apache Airflow | 2.8.4 | Orchestration des workflows |
| Snowflake | Cloud | Data Warehouse cible |
| Git / GitHub | DerniĂšre | Versionnement du code |
| Windows | 10/11 | Environnement dâexĂ©cution |
## â
ContrĂŽles & Tests
### Tests dbt
- `dbt test` est exécuté automatiquement aprÚs chaque `dbt run`.
- Tests inclus :
- Vérification de colonnes non nulles (`not_null`)
- Unicité des identifiants (`unique`)
- Intégrité des jointures entre sources
### Validation des extractions Talend
- Log Talend vérifié à chaque exécution.
- Retour dâĂ©tat capturĂ© dans Airflow.
### Monitoring de base
- Airflow UI permet le suivi manuel de l'état de chaque tùche.
- Statut de réussite/échec visible sur les DAGs.
> Pour un dĂ©ploiement en production, prĂ©voir lâajout de tests de qualitĂ© via **Great Expectations** ou **dbt tests personnalisĂ©s**.
## đ SĂ©curitĂ© & AccĂšs
### Connexion Ă Snowflake
- Authentification via clé PEM (stockée localement de maniÚre sécurisée)
- Mot de passe de la clé privé référencé par la variable Airflow `SNOWFLAKE_KEYSTORE_PASS`
### Recommandations
- Ne pas versionner la clé privée ou `profiles.yml` contenant les identifiants.
- Utiliser `.gitignore` pour exclure tout fichier sensible.
- Séparer les environnements dev/prod via des profils dbt distincts.
## đ AmĂ©liorations Possibles
- đ Passage dâAirflow vers un exĂ©cuteur parallĂšle (`LocalExecutor` ou `CeleryExecutor`) pour production.
- đ§Ș IntĂ©gration de **tests de qualitĂ© des donnĂ©es** avec [Great Expectations](https://greatexpectations.io/).
- đ Monitoring Ă©tendu avec **Prometheus + Grafana** ou **Airflow + DataDog**.
- đ Utilisation de **Vault** pour la gestion des secrets.
- đŠ Conteneurisation via **Docker** et dĂ©ploiement dans **AWS ECS / EKS**.
- 𧱠Refonte du modÚle `mart_articles` selon les principes de **modélisation en étoile**.
- đ ImplĂ©mentation de CI/CD avec **GitHub Actions** ou **GitLab CI** pour automatiser tests et dĂ©ploiements.