BigQuery unterstützt jetzt die SQL-Pipe-Syntax
(cloud.google.com)Was ist die Pipe Query Syntax?
- Eine erweiterte Syntax von GoogleSQL, mit der sich Abfragen in einer gut lesbaren und wartungsfreundlichen linearen Struktur schreiben lassen
- Unterstützt dieselben Operationen wie bisheriges GoogleSQL (Standard SQL), etwa Auswahl, Gruppierung, Joins und Filterung
- Die Reihenfolge der Operationen kann frei festgelegt werden, und auch komplexe Abfragen lassen sich ohne verschachtelte Unterabfragen schreiben
Standard SQL vs. Pipe Query Syntax
- Standard SQL
- Es muss eine bestimmte Syntaxreihenfolge eingehalten werden
- Bei mehreren Aggregationen sind CTEs (Common Table Expressions) oder verschachtelte Unterabfragen erforderlich
- Dieselben Spalten müssen in
SELECT,GROUP BYundORDER BYwiederholt angegeben werden
- Pipe Query Syntax
- Pipe-Operatoren können in beliebiger Reihenfolge angewendet werden
- Mehrere Aggregationen lassen sich einfach durch Hinzufügen von Pipe-Operatoren durchführen
- Spalten müssen nur einmal deklariert werden
Grundstruktur der Pipe Query Syntax
-
- Beginn mit der
FROM-Klausel
- Beginn mit der
-
- Nach
|>(Pipe-Operator) eine Operation hinzufügen
- Nach
-
- Mehrere
|>-Operatoren verketten, um die Abfrage schrittweise aufzubauen
(Beispiel: Die Reihenfolge von Filtern → Aggregieren → Joinen kann geändert werden)
- Mehrere
- Zentrale Eigenschaften
- Der Pipe-Operator kann jeder Abfrage hinzugefügt werden → bestehende GoogleSQL-Abfragen lassen sich erweitern, indem am Ende ein
|>-Operator angehängt wird - Die Reihenfolge der Operationen ist frei → Operatoren können in beliebiger Reihenfolge und beliebig oft angewendet werden
- In allen von GoogleSQL unterstützten Umgebungen nutzbar → einsetzbar in Abfragen, Views, tabellenrückgebenden Funktionen usw.
- Kann mit bestehender SQL-Syntax kombiniert werden → Unterabfragen können in Standard SQL, die Hauptabfrage in Pipe-Syntax geschrieben werden
- Auf alle in vorherigen Schritten definierten Aliase kann verwiesen werden
- Kann mit der
FROM-Klausel beginnen → die Abfrage lässt sich anschließend durch Hinzufügen von|>-Operatoren schrittweise erweitern
- Der Pipe-Operator kann jeder Abfrage hinzugefügt werden → bestehende GoogleSQL-Abfragen lassen sich erweitern, indem am Ende ein
Unterschiede zwischen Pipe Query Syntax und Standard SQL
- Eine Abfrage kann mit der
FROM-Klausel beginnen - Der
SELECT-Pipe-Operator führt keine Aggregation aus. Aggregationen werden separat mit demAGGREGATE-Pipe-Operator durchgeführt - Die Filterung erfolgt mit dem
WHERE-Pipe-Operator. Er fasst die Funktionen vonWHERE,HAVINGundQUALIFYaus Standard SQL zusammen. Filterung ist in jeder Phase möglich → ermöglicht flexiblere Abfragen
Vorteile der Pipe Query Syntax
- Abfragen lassen sich in logischer Reihenfolge schreiben → bessere Lesbarkeit
- Leichtere Wartung → auch komplexe Operationen sind ohne verschachtelte Unterabfragen möglich
- Flexible Reihenfolge der Operationen → Operatoren können in der gewünschten Reihenfolge angewendet werden
- Intuitivere Filterung → mit
WHERElassen sich Daten in verschiedenen Phasen filtern - Komplexe Aggregationsabfragen lassen sich einfacher schreiben → mit dem
AGGREGATE-Operator werden Aggregationen klarer formuliert
Wird in der Pre-GA-Phase unterstützt, die Unterstützung ist derzeit noch eingeschränkt
3 Kommentare
https://github.com/tc39/proposal-pipeline-operator
Ein ziemlich vertraut wirkender Operator.
Wenn man sich zuerst PRQL ansieht und dann Googles Pipeline-Syntax, wirkt sie etwas unruhig.
Hacker-News-Kommentare
Die Pipe-Syntax für SQL wurde am 30. Januar 2025 in Databricks implementiert
PRQL ist eine ähnliche Idee, die zu SQL kompiliert wird
Wenn sich die SQL-Syntax weiter ausdehnt, könnte die Komplexität zunehmen
Als die Pipe-Syntax erstmals angekündigt wurde, hat das SQLite-Team sie ausprobiert
PRQL ist eine pipe-orientierte Syntax für SQL-Datenbanken; da es sich um eine neue Sprache handelt, ist sie nicht abwärtskompatibel zu SQL
Funktioniert auch in DuckDB
Es könnte lästig sein, nach der Pipe ein
>einzugebenDie Sprache Malloy ist keine Pipe-Syntax, hat aber eine ähnliche analytische Syntax
Seit ich Kusto Query Language verwendet habe, hoffe ich, dass SQL solche Funktionen ebenfalls bekommt