SQL - C’est quoi REGEXP_CONTAINS() sur BigQuery?

SQL - C’est quoi REGEXP_CONTAINS() sur BigQuery?

Date de sortie
December 10, 2024
Auteur
Bertrand Fabre

💡 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 !