13 points par GN⁺ 2024-08-26 | 11 commentaires | Partager sur WhatsApp
  • SQL est la langue de base du traitement des données structurées depuis 50 ans, mais il reste difficile à apprendre, peu commode à utiliser et compliqué à faire évoluer
  • Problèmes du SQL existant : ordre syntaxique imposé, syntaxe redondante, nécessité d’utiliser des sous-requêtes, flux de données « de l’intérieur vers l’extérieur », manque d’extensibilité, etc.
  • Avec GoogleSQL, l’approche retenue pour résoudre ces problèmes consiste à étendre SQL
    • L’objectif est de résoudre les problèmes du SQL existant en introduisant dans SQL une syntaxe de flux de données en pipeline
    • Cela permet d’apprendre et d’utiliser SQL de manière plus flexible tout en conservant l’écosystème existant, avec une compatibilité totale avec le SQL actuel
      • Les opérateurs SQL existants sont réutilisés et peuvent être composés dans un ordre arbitraire via des pipelines
      • Chaque opérateur de pipeline ne voit que la table d’entrée, ce qui rend sa portée explicite
      • La sémantique déclarative est préservée
      • Une correspondance un à un avec l’algèbre relationnelle devient possible
      • L’extensibilité est améliorée grâce aux fonctions de table
    • Par exemple, des agrégations multi-étapes peuvent être exprimées de façon continue sans sous-requêtes
    • Le SQL utilisant la syntaxe en pipeline est plus simple à apprendre et à utiliser, et sa flexibilité est nettement améliorée car divers opérateurs peuvent être appliqués dans un ordre arbitraire
    • Les opérateurs de pipeline fonctionnent de manière séquentielle, ce qui permet de filtrer, agréger et trier les données plus facilement
  • Retour d’expérience dans GoogleSQL
    • Adoption régulière par les utilisateurs et retours positifs
    • Même les requêtes complexes peuvent être exprimées de manière linéaire
    • Pratique pour l’édition et le débogage
    • Meilleure prise en charge par les outils IDE
    • Avantageux pour les générateurs et convertisseurs de code SQL
    • Potentiels avantages pour les usages liés à l’IA
  • Implémentation et feuille de route
    • La syntaxe en pipeline a été implémentée dans GoogleSQL comme composant partagé
    • Les moteurs de requête existants peuvent activer cette syntaxe facilement
    • La prise en charge externe dans BigQuery et Spanner est à l’étude
    • Il serait intéressant d’explorer son inclusion future dans le standard SQL

L’avis de GN⁺

  • Avantages de la syntaxe en pipeline : elle peut devenir un outil puissant pour résoudre la complexité de SQL, notamment en permettant d’exprimer le flux de données de manière intuitive, ce qui améliore fortement l’utilisabilité de SQL.
  • Compatibilité avec le SQL existant : l’approche ne vise pas à remplacer SQL, mais à l’améliorer, ce qui réduit la courbe d’apprentissage tout en préservant la compatibilité avec le code existant.
  • Points à considérer lors de l’adoption : il faut évaluer l’impact sur les performances et le niveau de support des outils ; la syntaxe en pipeline peut être particulièrement avantageuse pour les requêtes de grande taille.
  • Comparaison avec des projets similaires : une structure en pipeline est aussi utilisée dans des API de DataFrame comme Pandas, mais la différence avec SQL réside dans son intégration à la sémantique déclarative de SQL. Cette fonctionnalité peut ainsi être utilisée tout en conservant l’extensibilité et les performances des systèmes SQL.

11 commentaires

 
dkang 2024-08-26

Un pipe avec un accent circonflexe, voilà une combinaison qui risque de faire mal à la main droite 🤣
Il est vrai que SQL a besoin de quelques améliorations.
Le vrai problème, c’est qu’on n’a pas trouvé de solution d’amélioration depuis 30 ou 40 ans..

 
savvykang 2024-08-26

On dirait que c’est à Google de faire avancer l’écosystème autour de la grammaire SQL supplémentaire, mais est-ce que la division va vraiment faire durer ça ?

 
chusine 2024-08-26

C’est du dplyr, hein haha

 
koreaisbest 2024-08-26

Pourquoi ai-je toujours l’impression que ça va être un échec dès que c’est Google qui s’y met..
Gemini répond en plus comme un gamin, donc ça ne me donne même pas envie de l’utiliser

 
ilotoki0804 2024-08-26

On dirait que c’est assez similaire à l’approche adoptée par les ORM.

 
winterjung 2024-08-26

Rien qu’en regardant l’exemple ci-dessous tiré du papier, on voit clairement que le SQL de Google est plus facile à lire.

SQL standard

SELECT c_count, COUNT(*) AS custdist  
FROM  
    ( SELECT c_custkey, COUNT(o_orderkey) c_count  
      FROM customer  
      LEFT OUTER JOIN orders ON c_custkey = o_custkey  
           AND o_comment NOT LIKE '%unusual%packages%'  
      GROUP BY c_custkey  
    ) AS c_orders  
GROUP BY c_count  
ORDER BY custdist DESC, c_count DESC;  

SQL Google

FROM customer  
|> LEFT OUTER JOIN orders ON c_custkey = o_custkey  
      AND o_comment NOT LIKE '%unusual%packages%'  
|> AGGREGATE COUNT(o_orderkey) c_count  
   GROUP BY c_custkey  
|> AGGREGATE COUNT(*) AS custdist  
   GROUP BY c_count  
|> ORDER BY custdist DESC, c_count DESC;  
 
mwma91 2024-08-30

Cela me fait penser au LINQ de C#. Chaque fois que j’utilise SQL, je me dis toujours qu’il serait préférable que l’ordre du SELECT passe après FROM et WHERE....
Au début, cela peut sembler étrange parce qu’on n’y est pas habitué, mais si on le lit lentement, le flux paraît bien plus naturel.

 
regentag 2024-08-27

Le côté SQL semble plus agréable à lire.

 
leftliber 2024-08-27

Personnellement, je trouve SQL bien plus facile à lire. Haha, j’imagine que c’est le cas pour la plupart des gens qui ont commencé avec SQL...

 
superwoou 2024-08-28

Moi aussi, je trouve que ce avec quoi on est habitué est plus facile à lire.. haha

 
GN⁺ 2024-08-26
Avis Hacker News
  • La syntaxe SQL en pipeline est devenue plus lisible
  • La syntaxe en pipeline était utile pour écrire des requêtes SQL chez Google
  • Souhaite que la syntaxe SQL en pipeline se généralise
  • Les résultats obtenus en convertissant un PDF en HTML dans Google AI Studio étaient bons
  • J’utilise SQL depuis plus de 20 ans, mais j’ai toujours du mal à exprimer certaines requêtes
  • Le projet open source ZetaSQL de Google a ajouté de la documentation sur la syntaxe en pipeline
  • Les frustrations liées à la syntaxe SQL ne sont pas une priorité
    • Il faudrait des fonctionnalités comme les types de données algébriques, une véritable logique booléenne et la composition fonctionnelle
  • De nombreuses tentatives ont été faites pour réduire la difficulté d’écriture en SQL, mais elles n’ont pas abouti
    • L’approche des auteurs est progressive et adaptée aux utilisateurs SQL existants
  • La syntaxe pipeline est meilleure que l’état actuel
    • Une syntaxe qui modéliserait l’exécution des requêtes comme un graphe orienté de tâches serait meilleure
      • Les jointures peuvent être modélisées comme une opération de « référence croisée » qui consomme deux flux de données ou plus et produit un flux de données
      • Les CTE peuvent être modélisées comme produisant plusieurs flux de données
      • Les CTE récursives peuvent être modélisées comme des cycles dans le graphe d’exécution
  • Cela ressemble à Elixir
    • Si la syntaxe SQL existante reste prise en charge, c’est acceptable, mais les requêtes avec plusieurs JOIN, sous-requêtes et agrégations peuvent perdre en lisibilité
  • Cela fait penser à PRQL et au SPL de Splunk