Module 3 : SQL Pools
SQL Serverless (Built-in Pool)
Le pool SQL serverless permet d'interroger directement des fichiers stockés dans Azure Data Lake sans les importer.
Syntaxe OPENROWSET
La fonction principale pour lire des fichiers externes :
-- Lire un fichier CSV
SELECT *
FROM OPENROWSET(
BULK 'https://moncompte.dfs.core.windows.net/data/ventes.csv',
FORMAT = 'CSV',
HEADER_ROW = TRUE
) AS ventes
-- Lire des fichiers Parquet
SELECT *
FROM OPENROWSET(
BULK 'https://moncompte.dfs.core.windows.net/data/clients/*.parquet',
FORMAT = 'PARQUET'
) AS clients
Créer une vue externe
-- Créer une base de données
CREATE DATABASE AnalyticsDB;
GO
USE AnalyticsDB;
GO
-- Créer une vue sur des fichiers Parquet
CREATE VIEW v_ventes AS
SELECT *
FROM OPENROWSET(
BULK 'https://moncompte.dfs.core.windows.net/data/ventes/**',
FORMAT = 'PARQUET'
) AS ventes;
Astuce : Utilisez le format Parquet pour de meilleures performances. Il est compresse et permet le "predicate pushdown" (filtrage au niveau du stockage).
SQL Pool Dédié
Le pool dédié est un data warehouse hautes performances avec des ressources réservées.
Créer une table distribuée
-- Table avec distribution HASH
CREATE TABLE dbo.FactVentes
(
VenteID INT NOT NULL,
DateID INT NOT NULL,
ClientID INT NOT NULL,
ProduitID INT NOT NULL,
Quantite INT,
Montant DECIMAL(18,2)
)
WITH
(
DISTRIBUTION = HASH(ClientID),
CLUSTERED COLUMNSTORE INDEX
);
Types de distribution
| Type | Usage |
|---|---|
HASH(colonne) |
Tables de faits, jointures fréquentes sur cette colonne |
ROUND_ROBIN |
Tables temporaires, chargement rapide |
REPLICATE |
Petites tables de dimension (< 2GB) |
Charger des données avec COPY
-- Charger depuis un fichier Parquet
COPY INTO dbo.FactVentes
FROM 'https://moncompte.dfs.core.windows.net/data/ventes/*.parquet'
WITH (
FILE_TYPE = 'PARQUET',
CREDENTIAL = (IDENTITY = 'Managed Identity')
);
Bonnes pratiques
Serverless :
- Utilisez des formats colonnes (Parquet, Delta)
- Partitionnez vos fichiers par date
- Créez des vues pour simplifier les requêtes
Pool Dédié :
- Choisissez bien votre colonne de distribution
- Utilisez les index columnstore pour l'analytique
- Mettez en pause le pool quand inutilisé
Requêtes utiles
-- Voir les distributions d'une table
SELECT distribution_id, COUNT(*) as rows_count
FROM sys.dm_pdw_nodes_db_partition_stats
WHERE object_id = OBJECT_ID('dbo.FactVentes')
GROUP BY distribution_id;
-- Statistiques de requête
SELECT * FROM sys.dm_pdw_exec_requests
ORDER BY submit_time DESC;