<style>
.hidden-xs {
visibility: hidden;
}
.navbar-default .navbar-brand {
color: white;
}
.fa-file-text{
visibility: hidden;
}
body > nav > div.navbar-header > a:after{
content: 'UNC';
font-size: xx-large;
font-weight: bold;
}
.navbar-collapse {
background-color: #046FB7;
color: white;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
H2 {
background-color: lightsteelblue;
border-color: #d6e9c6;
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
}
</style>
## SID - infrastructure, architecture, ETL

---
## Définitions
<!-- .element: class="fragment" data-fragment-index="1" -->
- **BO**: Business Objects was an enterprise software company, specializing in business intelligence. Business Objects was acquired in 2007 by German company SAP AG (outil utilisé à l'unc). Concurrent: Cognos (dinum), Microsoft Power BI
<!-- .element: class="fragment" data-fragment-index="2" -->
- **ETL**: Extract, transform, and load. (wiki) technologie informatique intergicielle permettant d'effectuer des synchronisations massives d'information d'une source de données (le plus souvent une base de données) vers une autre
<!-- .element: class="fragment" data-fragment-index="3" -->
---
## Définitions
<!-- .element: class="fragment" data-fragment-index="1" -->
**Designer** : outil de construction des univers
<!-- .element: class="fragment" data-fragment-index="2" -->
**Webi**: outil de création des rapports
<!-- .element: class="fragment" data-fragment-index="3" -->
**Cmc**: outil d'administration (utilisateur, droits etc...)
<!-- .element: class="fragment" data-fragment-index="4" -->
---
## Définitions
<!-- .element: class="fragment" data-fragment-index="1" -->
- **SID**: système d'information décisionnel - Ensemble des moyens, outils et méthodes qui permettent à l’entreprise de **collecter**, **transformer**(renforcer, stocker, agréger) et **restituer** les **données importantes** afin de fournir une **aide à la décision**.
<!-- .element: class="fragment" data-fragment-index="2" -->
---
## Base de données relationnel (cocktail)

<!-- .element: class="fragment" data-fragment-index="1" -->
- **Minimal data redundancy**
- **Optimised for fast read + fast write**
- **Current data only** (non historisé)
- **Realtime data**: (transactional)
<!-- .element: class="fragment" data-fragment-index="2" -->
---
## Star schéma

<!-- .element: class="fragment" data-fragment-index="1" -->
- **Redundant data storage for performance**
- **Fast reads only**
- **Non-realtime data**
- **Current + historical data**
<!-- .element: class="fragment" data-fragment-index="2" -->
---
## Qui fait quoi ?
```graphviz
digraph G {
graph [rankdir=LR]
subgraph cluster_0 {
style=filled;
color=lightblue;
node [style=filled];
oracleProd;
odata;
sise;
parcoursup;
fichiers;
scriptSQL;
Entrepot;
univers;
label = "DNSI";
}
subgraph cluster_1 {
style=filled;
color=lightpink;
node [style=filled];
n1 [style=invisible]
n2 [style=invisible]
boOutil;
n3 [style=invisible]
n4 [style=invisible]
label = "CAPE";
}
subgraph cluster_2 {
style=filled;
color=lightyellow;
node [style=filled];
n5 [style=invisible]
Dupont;
Durant;
Dubois;
n6 [style=invisible]
label = "Utilisateurs";
}
oracleProd [label="Cocktail", shape=cylinder]
odata [label="open data", shape=note]
sise [label="Sise", shape=note]
parcoursup [label="Parcoursup", shape=note]
fichiers [label="Fichiers", shape=note]
univers [label="Univers", shape=rect]
scriptSQL [label="ETL\n(3x / jour)", shape=box3d]
boOutil [label="Webi\n(création des rapports)", shape=rect]
Entrepot [label="Entrepot", shape=cylinder]
oracleProd->scriptSQL
odata->scriptSQL
sise ->scriptSQL
parcoursup->scriptSQL
fichiers->scriptSQL
scriptSQL-> Entrepot
Entrepot-> univers
univers -> boOutil
boOutil->Dupont
boOutil->Durant
boOutil->Dubois
}
```
---
## Architecture
- **Définir** l’architecture de l’ETL en fonction des volumes de données, des sources et des besoins en transformation.
<!-- .element: class="fragment" data-fragment-index="1" -->
- **Analyser** les contraintes de performance (latence, temps de traitement), de stockage (base de données, data lake) et de sécurité.
<!-- .element: class="fragment" data-fragment-index="2" -->
- **Évaluer** les ressources disponibles (capacités de calcul, infrastructure cloud ou on-premise, budget, compétences de l’équipe).
<!-- .element: class="fragment" data-fragment-index="3" -->
- **Choisir** entre un ETL batch (traitement par lots) ou streaming (temps réel) selon les exigences métier.
<!-- .element: class="fragment" data-fragment-index="4" -->
---
## Architecture
- **Sélectionner** les technologies adaptées (Airflow, Talend, Spark, DBT, SQL, Python, etc.) en fonction de la scalabilité et de la facilité de maintenance.
<!-- .element: class="fragment" data-fragment-index="1" -->
- **Optimiser** les transformations pour limiter la consommation de ressources et éviter les goulots d’étranglement.
<!-- .element: class="fragment" data-fragment-index="2" -->
- **Gérer** les erreurs et les reprises en cas d’échec (logging, monitoring, gestion des données corrompues).
<!-- .element: class="fragment" data-fragment-index="3" -->
- **Adapter** l’ETL en fonction des évolutions des sources de données et des besoins métier.
<!-- .element: class="fragment" data-fragment-index="4" -->
---
## Ressources
- oracle (maitrisé, facilement clonable )<!-- .element: class="fragment" data-fragment-index="1" -->
- gitlab (usine logicielle)<!-- .element: class="fragment" data-fragment-index="2" -->
- Maitrise d'équipe du language SQL<!-- .element: class="fragment" data-fragment-index="3" -->
---
## Contraintes UNC
- petite équipe<!-- .element: class="fragment" data-fragment-index="1" -->
- ne pas impacter la production<!-- .element: class="fragment" data-fragment-index="2" -->
- rafraichissement rapide, modifications faciles<!-- .element: class="fragment" data-fragment-index="3" -->
---
```graphviz
digraph summary {
node [ shape=box]
"Oracle PROD (sources)"->"Script SQL (ETL)"[label=" Lecture"]
}
```
---
```graphviz
digraph summary {
node [ shape=box]
"Oracle PROD (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Fichiers XLS (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Autres (sources)"->"Script SQL (ETL)"[label=" Lecture"]
}
```
---
```graphviz
digraph summary {
node [ shape=box]
"Oracle PROD (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Fichiers XLS (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Autres (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Script SQL (ETL)"-> "Oracle SID (destination)"[label=" Ecriture"]
}
```
---
```graphviz
digraph summary {
node [ shape=box]
"Oracle PROD (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Fichiers XLS (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Autres (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Script SQL (ETL)"-> "Oracle SID (destination)"[label=" Ecriture"]
"Oracle SID (destination)"->"BO (outil)" [label=" Lecture"]
}
```
---
```graphviz
digraph summary {
node [ shape=box]
subgraph cluster_0 {
style=filled;
color=lightblue;
node [style=filled,color=white];
"Oracle PROD (sources)";
"Fichiers XLS (sources)";
"Autres (sources)";
label = "collecter";
}
"Oracle PROD (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Fichiers XLS (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Autres (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Script SQL (ETL)"-> "Oracle SID (destination)"[label=" Ecriture"]
"Oracle SID (destination)"->"BO (outil)" [label=" Lecture"]
}
```
---
```graphviz
digraph summary {
node [ shape=box]
subgraph cluster_0 {
style=filled;
color=lightblue;
node [style=filled,color=white];
"Oracle PROD (sources)";
"Fichiers XLS (sources)";
"Autres (sources)";
label = "collecter";
}
subgraph cluster_1 {
style=filled;
color=lightpink;
node [style=filled,color=white];
"Script SQL (ETL)";
label = "renforcer agréger";
}
"Oracle PROD (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Fichiers XLS (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Autres (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Script SQL (ETL)"-> "Oracle SID (destination)"[label=" Ecriture"]
"Oracle SID (destination)"->"BO (outil)" [label=" Lecture"]
}
```
---
```graphviz
digraph summary {
node [ shape=box]
subgraph cluster_0 {
style=filled;
color=lightblue;
node [style=filled,color=white];
"Oracle PROD (sources)";
"Fichiers XLS (sources)";
"Autres (sources)";
label = "collecter";
}
subgraph cluster_1 {
style=filled;
color=lightpink;
node [style=filled,color=white];
"Script SQL (ETL)";
label = "renforcer agréger";
}
subgraph cluster_3 {
style=filled;
color=chocolate1;
node [style=filled,color=white];
"Oracle SID (destination)";
label = "stocker";
}
"Oracle PROD (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Fichiers XLS (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Autres (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Script SQL (ETL)"-> "Oracle SID (destination)"[label=" Ecriture"]
"Oracle SID (destination)"->"BO (outil)" [label=" Lecture"]
}
```
---
```graphviz
digraph summary {
node [ shape=box]
subgraph cluster_0 {
style=filled;
color=lightblue;
node [style=filled,color=white];
"Oracle PROD (sources)";
"Fichiers XLS (sources)";
"Autres (sources)";
label = "collecter";
}
subgraph cluster_1 {
style=filled;
color=lightpink;
node [style=filled,color=white];
"Script SQL (ETL)";
label = "renforcer agréger";
}
subgraph cluster_2 {
style=filled;
color=darkseagreen1;
node [style=filled,color=white];
"BO (outil)";
label = "restituer";
}
subgraph cluster_3 {
style=filled;
color=chocolate1;
node [style=filled,color=white];
"Oracle SID (destination)";
label = "stocker";
}
"Oracle PROD (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Fichiers XLS (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Autres (sources)"->"Script SQL (ETL)"[label=" Lecture"]
"Script SQL (ETL)"-> "Oracle SID (destination)"[label=" Ecriture"]
"Oracle SID (destination)"->"BO (outil)" [label=" Lecture"]
}
```
---
## Démo
---
## Conclusion
- simple
- versionné
- automatisé
- autodocumenté
{"metaMigratedAt":"2023-06-18T03:05:16.134Z","metaMigratedFrom":"YAML","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"theme\":\"white\",\"spotlight\":{\"enabled\":false}}","title":"SID - infrastructure, architecture, ETL, 2025","contributors":"[{\"id\":\"de007113-612d-4b2a-a91c-6a3e348b3f22\",\"add\":27530,\"del\":16041}]"}