SQL - C’est quoi UNPIVOT sur BigQuery?

SQL - C’est quoi UNPIVOT sur BigQuery?

Date de sortie
November 12, 2024
Auteur
Bertrand Fabre
“Hey, j’ai déjà utilisé la fonctionnalité PIVOT sur BigQuery pour passer de lignes vers colonnes. Mais tu penses qu’il est possible de passer de colonnes vers lignes ?”.

Il est effectivement possible de passer de données dont un ou plusieurs dimensions sont représentés en colonnes vers des données dont les dimensions sont exclusivement en ligne. On pourrait dire que l’on passe d’un format large à un format long.

Pour réaliser cette opération, il existe UNPIVOT en SQL sur BigQuery.

En voici la syntaxe :

SELECT *
FROM maSuperTableLarge
UNPIVOT(
	nomNouvelleColonneDesValeursDeBase
	FOR nouvelleColonneDesColonnesVersDesLignes
	IN (nomColVersLigne1, nomColVersLigne2, nomColVersLigneX)
)

Comment ça, ce n’est pas clair ? Bon, on va vite s’orienter vers l’exemple alors 😅.

J’ai repris l’exemple de la documentation de Google qui m’a semblé adapté.

Nous avons le suivi des ventes de fruits sur 4 trimestres.

WITH Produce AS (
  SELECT 'Kale' as product, 51 as Q1, 23 as Q2, 45 as Q3, 3 as Q4 UNION ALL
  SELECT 'Apple', 77, 0, 25, 2)
SELECT * FROM Produce

Résultat

product
Q1
Q2
Q3
Q4
Kale
51
23
45
3
Apple
77
0
25
2

Nous voudrions avoir ces ventes par trimestre et par produit en ligne. C’est à ce moment que l’opération UNPIVOT devient utile.

WITH Produce AS (
  SELECT 'Kale' as product, 51 as Q1, 23 as Q2, 45 as Q3, 3 as Q4 UNION ALL
  SELECT 'Apple', 77, 0, 25, 2)
SELECT * FROM Produce
UNPIVOT(sales FOR quarter IN (Q1, Q2, Q3, Q4))
;

Résultat

product
sales
quarter
Kale
51
Q1
Kale
23
Q2
Kale
45
Q3
Kale
3
Q4
Apple
77
Q1
Apple
0
Q2
Apple
25
Q3
Apple
2
Q4

Dans le premier mot clé du UNPIVOT, “sales”, c’est à cet endroit que l’on va indiquer le nom que représente les valeurs de la table. En effet, la table est un suivi des ventes et tous les nombres contenu dedans sont donc la niveau des ventes. Comme nous souhaitons plutôt mettre ces données lignes, ce la engendre la création d’une nouvelle colonne.

Après le FOR on lui indique le nom de la colonne qui va contenir les différentes modalités de ce qui était avant les colonnes. Au début nous avions les ventes par trimestre et là nous souhaitons mettre ces 4 trimestres en ligne. Il faudra donc nommer cette nouvelle colonne et lister les colonnes (Q1, Q2, Q3 et Q4 dans notre cas) qui seront intégrées dans cette nouvelles colonne.

A la fin nous avons donc garder la colonne déjà présente en ligne qui est “product” et nous avons intégré en ligne également les trimestres avec leurs ventes respectives selon le produit.

Merci de votre lecture !