BigQuery prend désormais en charge la syntaxe SQL en pipe
(cloud.google.com)Qu’est-ce que la Pipe Query Syntax ?
- Une extension de GoogleSQL qui permet d’écrire des requêtes dans une structure linéaire, plus lisible et plus facile à maintenir
- Prend en charge les mêmes opérations que le GoogleSQL existant (Standard SQL) : sélection, regroupement, jointure, filtrage, etc.
- Permet de définir librement l’ordre des opérations et d’écrire des requêtes complexes sans sous-requêtes imbriquées
Standard SQL vs Pipe Query Syntax
- Standard SQL
- Doit suivre un ordre de syntaxe précis
- L’utilisation de multiples agrégations nécessite des CTE (Common Table Expressions) ou des sous-requêtes imbriquées
- Il faut répéter les mêmes colonnes dans
SELECT,GROUP BYetORDER BY
- Pipe Query Syntax
- Les opérateurs pipe peuvent être appliqués dans n’importe quel ordre
- De multiples agrégations peuvent être réalisées simplement en ajoutant des opérateurs pipe
- Il suffit de déclarer les colonnes une seule fois
Structure de base de la Pipe Query Syntax
-
- Commencer par la clause
FROM
- Commencer par la clause
-
- Ajouter une opération après
|>(opérateur pipe)
- Ajouter une opération après
-
- Enchaîner plusieurs opérateurs
|>pour construire la requête étape par étape
(ex. : il est possible de changer l’ordre entre filtrage → agrégation → jointure)
- Enchaîner plusieurs opérateurs
- Caractéristiques clés
- Il est possible d’ajouter des opérateurs pipe à n’importe quelle requête → une requête GoogleSQL existante peut être étendue en ajoutant un opérateur
|>à la fin - L’ordre des opérations est libre → les opérateurs peuvent être appliqués dans l’ordre souhaité, autant de fois que nécessaire
- Utilisable dans tous les environnements compatibles avec GoogleSQL → requêtes, vues, fonctions renvoyant des tables, etc.
- Peut être mélangée avec la syntaxe SQL existante → une sous-requête peut être en Standard SQL tandis que la requête principale utilise la syntaxe pipe
- Toutes les alias définis à l’étape précédente peuvent être référencés
- La requête peut commencer par une clause
FROM→ puis être étendue progressivement en ajoutant des opérateurs|>
- Il est possible d’ajouter des opérateurs pipe à n’importe quelle requête → une requête GoogleSQL existante peut être étendue en ajoutant un opérateur
Différences entre la Pipe Query Syntax et le Standard SQL
- Une requête peut commencer par la clause
FROM - L’opérateur pipe SELECT n’effectue pas d’agrégation. Pour agréger, il faut utiliser séparément l’opérateur pipe AGGREGATE
- Le filtrage s’effectue avec l’opérateur pipe WHERE. Il regroupe en une seule fonction les rôles de WHERE, HAVING et QUALIFY du Standard SQL. Le filtrage peut être appliqué à n’importe quelle étape → écriture de requêtes plus flexible
Avantages de la Pipe Query Syntax
- Les requêtes peuvent être écrites dans un ordre logique → meilleure lisibilité
- Maintenance facilitée → permet d’effectuer des opérations complexes sans sous-requêtes imbriquées
- Ordre des opérations flexible → les opérations peuvent être appliquées dans l’ordre souhaité
- Filtrage plus intuitif →
WHEREpermet de filtrer les données à différentes étapes - Les requêtes d’agrégation complexes sont plus faciles à écrire → l’opérateur
AGGREGATEpermet d’effectuer des agrégations de façon claire
La fonctionnalité est prise en charge au stade Pre-GA, avec un support encore limité
3 commentaires
https://github.com/tc39/proposal-pipeline-operator
Un opérateur qui semble assez familier.
Après avoir d’abord regardé PRQL, voir la syntaxe pipeline de Google me paraît un peu brouillon.
Avis sur Hacker News
La syntaxe en pipeline de SQL a été implémentée dans Databricks à partir du 30 janvier 2025
PRQL est une idée similaire compilée en SQL
Si les extensions de syntaxe SQL continuent de se multiplier, la complexité peut augmenter
Lorsque la syntaxe en pipeline a été annoncée pour la première fois, l’équipe de SQLite l’a testée
PRQL est une syntaxe orientée pipeline pour les bases de données SQL, mais comme il s’agit d’un nouveau langage, elle n’est pas rétrocompatible avec SQL
C’est aussi disponible dans DuckDB
Saisir ">" après le pipeline peut être fastidieux
Le langage Malloy n’utilise pas une syntaxe en pipeline, mais propose une syntaxe analytique similaire
Depuis que j’utilise Kusto Query Language, j’espère que SQL adoptera ce type de fonctionnalité