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;