azure
Support formation Microsoft Azure
azure
Support formation Microsoft Azure

SumUp

Gonzague Ducos

Lab 02 | Analyser les données d’un lac de données avec Spark

PyShark

Matplotlib

Bibliothèque Python pour créer des graphiques

Seaborn

Bibliothèque Python basée sur Matplotlib

Lab 03 | Transformer des fichiers à l’aide d’un pool SQL serverless

Script général de création CETAS (CREATE EXTERNAL TABLE AS SELECT)

Les fichiers sont dans le datalake ADLS2, dans le dossier racine files :
image.png

Ce qui donne :
image.png
Créer la table externe :
Ce qui donne :
image.png

Création d’une procédure


Lab 04 | Analyser les données dans une base de données de lac

Les modèles de base de données sont un ensemble de définitions de données techniques et d’entreprise préconçues pour répondre aux besoins d’un secteur en particulier. Ils jouent le rôle de blueprints fournissant des éléments communs dérivés des bonnes pratiques, des réglementations gouvernementales et des exigences complexes en matière de données et d’analytique d’une organisation appartenant à un secteur spécifique.

Lab 07 | Utiliser Delta Lake avec Spark dans Azure Synapse Analytics

Erreurs & solutions

File cannot be opened because it does not exist or it is used by another process,
Dans le Compta de stockage > Contrôle d’accès (IAM) > Ajouter une attribution de rôle : Ajouter Contributeur aux données Blob du stockage.

Se connecter à un pool SQL Serverless depuis Power BI

Récupérer l’adresse du serveur depuis la page Vue d’ensemble de l’Espace de stockage. Le premier lien pointe vers la base Serverless, le 2nd vers la base dédiée. ​
image.png
Se connecter à SQL Sever ou à Base de données SQL Azure ou à Azure Synapse Analytics. Coller.

Lab 08 | Explorer un entrepôt de données relationnelles

ROW_NUMBER()

SELECT g.EnglishCountryRegionName AS Region,
ROW_NUMBER() OVER(PARTITION BY g.EnglishCountryRegionName
ORDER BY i.SalesAmount ASC) AS RowNumber,
FROM FactInternetSales AS i
JOIN DimDate AS d ON i.OrderDateKey = d.DateKey
JOIN DimCustomer AS c ON i.CustomerKey = c.CustomerKey
JOIN DimGeography AS g ON c.GeographyKey = g.GeographyKey

WHERE d.CalendarYear = 2022
ORDER BY Region;
Ce qui affiche :
Region
RowNumber
OrderNo
Australie
1
SO73943
Australie
2
SO74100
Australie
5779
SO64284
Canada
1
SO66332
Canada
2
SO68234
Canada
3568
SO70911
There are no rows in this table
Syntaxe
ROW_NUMBER ( )
OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
Aide

OVER PARTITION

Syntaxe
SELECT g.EnglishCountryRegionName AS Region,
g.City,
SUM(i.SalesAmount) AS CityTotal,
SUM(SUM(i.SalesAmount)) OVER(PARTITION BY g.EnglishCountryRegionName) AS RegionTotal,
RANK() OVER(PARTITION BY g.EnglishCountryRegionName
ORDER BY SUM(i.SalesAmount) DESC) AS RegionalRank
FROM FactInternetSales AS i
JOIN DimDate AS d ON i.OrderDateKey = d.DateKey
JOIN DimCustomer AS c ON i.CustomerKey = c.CustomerKey
JOIN DimGeography AS g ON c.GeographyKey = g.GeographyKey
GROUP BY g.EnglishCountryRegionName, g.City
ORDER BY Region;
Ce qui affiche :
Region
City
CityTotal
RegionTotal
RegionalRank
Australia
Wollongong
338913.4665
9061000.5844
1
Australia
Warrnambool
327036.3682
9061000.5844
2
Australia
Bendigo
314568.7193
9061000.5844
3
Australia
Goulburn
310875.8978
9061000.5844
4
Australia
Brisbane
295353.5779
9061000.5844
5
Australia
Townsville
285486.9112
9061000.5844
6
Australia
Geelong
283802.1750
9061000.5844
7
Australia
Caloundra
281986.3402
9061000.5844
8
Australia
Sydney
280983.3113
9061000.5844
9
Australia
Port Macquarie
278084.4993
9061000.5844
10
Australia
Sunbury
266949.5347
9061000.5844
11
Australia
Melton
262606.4258
9061000.5844
12
Australia
Hervey Bay
259256.5090
9061000.5844
13
Australia
Gold Coast
248767.9840
9061000.5844
14
Australia
Melbourne
246557.5296
9061000.5844
15
Australia
Newcastle
245936.5243
9061000.5844
16
Australia
Hobart
239937.9033
9061000.5844
17
Australia
Coffs Harbour
235454.9685
9061000.5844
18
Australia
Hawthorne
226706.4414
9061000.5844
19
Australia
Lane Cove
220083.5784
9061000.5844
20
There are no rows in this table
Syntaxe
OVER (
[ <PARTITION BY clause> ]
[ <ORDER BY clause> ]
Aide

APPROX_COUNT_DISTINCT

SELECT d.CalendarYear AS CalendarYear,
APPROX_COUNT_DISTINCT(i.SalesOrderNumber) AS Orders
FROM FactInternetSales AS i
JOIN DimDate AS d ON i.OrderDateKey = d.DateKey
GROUP BY d.CalendarYear
ORDER BY CalendarYear;

Lab 09 | Charger des données dans un entrepôt de données relationnel

COPY INTO

COPY INTO dbo.StageProduct
(ProductID, ProductName, ProductCategory, Color, Size, ListPrice, Discontinued)

FROM 'https://datalakexxxxxx.blob.core.windows.net/files/data/Product.csv'
WITH
(
FILE_TYPE = 'CSV',
MAXERRORS = 5,
IDENTITY_INSERT = 'OFF',
FIRSTROW = 2 --Skip header row
);

Si au moins 5 erreurs, création de fichiers QID123_1_2. Error.txt et QID123_1_2. Row.Txt dans _rejectedrows + sous-dossier spécifique à la date et à l’heure qu’il contient
En fin de processus, on rebuild les index et re crée les statistiques (optimisation des requêtes).
ALTER INDEX ALL ON dbo.DimProduct REBUILD;
CREATE STATISTICS customergeo_stats ON dbo.DimCustomer (GeographyKey);

Dimensions à changement lent de type 1 et de type 2

DimCustomer est la table de dimension d’un espace dbo, StageTable est une table intermédiaire.
INSERT INTO dbo.DimCustomer (<champs>)
SELECT *
FROM dbo.StageCustomer AS stg
WHERE NOT EXISTS
(SELECT * FROM dbo.DimCustomer AS dim
WHERE dim.CustomerAlternateKey = stg.CustomerAlternateKey);

-- Mise à jour de Type 1 (change <champ1>, <champ2>... sur place)
UPDATE dbo.DimCustomer
SET <champ1> = stg.<champ1>,
<champ2> = stg.<champ2>
FROM DimCustomer dim inner join StageCustomer stg
ON dim.CustomerAlternateKey = stg.CustomerAlternateKey
WHERE dim.<champ1> <> stg.<champ1> OR dim.<champ2> <> stg.<champ2>

-- Mise à jour de Type 2 updates (des changements de <champ3> déclanche une nouvelle entrée)
INSERT INTO dbo.DimCustomer
SELECT <Champs>
FROM dbo.StageCustomer AS stg
JOIN dbo.DimCustomer AS dim
ON stg.CustomerAlternateKey = dim.CustomerAlternateKey
AND stg.<champ3> <> dim.<champ3>;

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.