💡 L’astuce data : c’est quoi REGEXP_CONTAINS() ?
“Je trouve que le LIKE en SQL est assez limité. Tu n’as pas quelque chose de plus flexible ?”.
Si bien sûr ! Lorsque l’on souhaite manipuler des chaînes de caractères et surtout vérifier le respect de certains paterns variés, on s’oriente vers l’utilisation des expressions régulières.
Ces dernières sont un langage de description d’une chaîne de caractères (ma définition).
Et en SQL sur BigQuery (peut-être, je n’ai pas regardé), il est possible d’utiliser ces expressions régulières, ou regexp, pour vérifier si un texte contient le patern recherché.
Cette fonction s’appelle REGEXP_CONTAINS().
Syntaxe
REGEXP_CONTAINS(monTexte, monExpressionRégulière)
Maîtriser les expressions régulières est un long chemin…
Et comme je suis encore sur le chemin 😅 je vous propose d’aller regarder du côté de ce site qui aide pas mal pour nous assister dans l’écriture des regex : https://regexr.com
Le résultat retourné par cette fonction est un booléen : true ou false.
Mettons cette fonction en image avec un exemple parlant.
Prenons un jeu de données d’un référentiel de produit.
L’objectif est de filtrer les Vêtements et Accessoires.
WITH retail_data AS (
SELECT 'P001' AS product_id, 'T-Shirt' AS product_name, 'Vêtements' AS category UNION ALL
SELECT 'P002', 'Jeans', 'Vêtements' UNION ALL
SELECT 'P003', 'Montre', 'Accessoires' UNION ALL
SELECT 'P004', 'Chaussures', 'Chaussures' UNION ALL
SELECT 'P005', 'Ceinture', 'Accessoires' UNION ALL
SELECT 'P006', 'Pull', 'Vêtement'
)
SELECT
product_id,
product_name,
category
FROM
retail_data
WHERE
REGEXP_CONTAINS(category, r'Vêtement?|Accessoires');
Comme la fonction retourne un booléen, on peut l’utilisation dans un WHERE pour faire un filtre des données.
Le pipe ou “|” que vous voyez entre les deux mots clés recherchés signifie “ou” (soit l’un soit l’autre).
Le “?” permet de dire qu’il peut y avoir un caractère ou non après “Vêtement”.
Résultats
product_id | product_name | category |
P001 | T-Shirt | Vêtements |
P002 | Jeans | Vêtements |
P003 | Montre | Accessoires |
P005 | Ceinture | Accessoires |
P006 | Pull | Vêtement |
Merci de votre lecture !