Module 3 : SQL Pools
SQL Serverless (Built-in Pool)
Le pool SQL serverless permet d'interroger directement des fichiers stockes 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
Creer une vue externe
-- Creer une base de donnees
CREATE DATABASE AnalyticsDB;
GO
USE AnalyticsDB;
GO
-- Creer 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 Dedie
Le pool dedie est un data warehouse hautes performances avec des ressources reservees.
Creer une table distribuee
-- 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 frequentes sur cette colonne |
ROUND_ROBIN |
Tables temporaires, chargement rapide |
REPLICATE |
Petites tables de dimension (< 2GB) |
Charger des donnees 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
- Creez des vues pour simplifier les requetes
Pool Dedie :
- Choisissez bien votre colonne de distribution
- Utilisez les index columnstore pour l'analytique
- Mettez en pause le pool quand inutilise
Requetes 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 requete
SELECT * FROM sys.dm_pdw_exec_requests
ORDER BY submit_time DESC;