Google vil endre SQL-syntaksen – men ikke alle jubler

– Det har gått 50 år. Det er på tide å rydde opp i SQL, skriver en gruppe Google-forskere.

Er det ikke ulogisk å måtte skrive SELECT <i>før</i> FROM? Det synes Google også, og foreslår en ny syntaks. 📸: NTB / Shutterstock
Er det ikke ulogisk å måtte skrive SELECT før FROM? Det synes Google også, og foreslår en ny syntaks. 📸: NTB / Shutterstock Vis mer

Google mener de kan forbedre database-spørrespråket SQL, blant annet ved å innføre en ny pipe-operator i språket. Det skriver DevClass.

I en vitenskapelig artikkel publisert av 13 Google-forskere står det at selv om nesten alle databasesystemer bruker SQL som sitt hovedspørrespråk, og språket har hatt ekstremt stor suksess som en de facto standard for å jobbe med data, så har det sine utfordringer.

– SQL er et gammelt språk med betydelige designproblemer, som gjør det vanskelig å lære, vanskelig å bruke og vanskelig å utvide, skriver forskerne.

De skriver videre at selv om mange har sett disse utfordringene, og prøvd å løse dette med nye språk, så er det å lære nye språk en stor terskel for brukere. Ingen har tidligere lykkes med å erstatte SQL med noe annet.

Ulogisk rekkefølge

Synes du også det er ulogisk å måtte skrive SELECT før FROM i SQL? For eksempel for å hente ut alt fra tabellen customer, må du skrive:

SELECT * 
FROM customer;

Her ville det vært mer logisk å starte med FROM, ettersom det jo ikke er mulig å hente ut noe som helst fra databasen før SQL vet hvor den skal hente det fra (customer-tabellen, i dette tilfellet).

Det at ting må defineres i en rigid rekkefølge gjør SQL lite fleksibelt, mener Google-forskerne.

Alle disse begrensningene i SQL gjør også at du noen ganger må lage "subqueries" og på ulike måter jobbe deg rundt begrensningene, argumenterer de.

– Det har gått 50 år. Det er på tide å rydde opp i SQL, skriver Google.

Pipe-syntaks fikser det

Google mener de kan "fikse SQL" med en ny pipe-syntaks. For de som ikke kjenner pipe fra før, så brukes denne i noen programmeringsspråk – og blant annet i Linux- og Windows-kommmandolinjen – for å bruke output fra én operasjon som input til en annen.

I stedet for den mer vanlige "|" så vil Google bruke "|>" som pipe-operator. Denne brukes også i språk som F#, Elm og Elixir.

Google skriver at pipe-operatoren vil kunne forenkle kompliserte spørringer som denne:

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;

Så du i stedet kan skrive:

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;

Her brukes "|>" til å sende resultatene fra én operasjon som input til neste.

– Med pipe-syntaks kan tilsvarende logikk uttrykkes sekvensielt, ved å bruke operatorer fra top til bunn i vilkårlig rekkefølge, skriver Google.

Brukes allerede hos Google

Google har allerede selv implementert pipe-operatoren i sin egen SQL-dialekt GoogleSQL, og bruker dette internt hos seg.

– I GoogleSQL løser vi SQLs problemer med å utvide SQL. Vi har, inspirert av et mønster som fungerer godt i andre moderne data-språk, lagt til en pipe-basert dataflyt-syntaks i SQL.

Det å utvide SQL på denne måten er bedre enn å lage noe nytt, mener Google.

– Å forbedre SQL fra innsiden gjør det mulig å gradvis ta i bruk ny funksjonalitet, uten migreringer og uten å måtte lære et nytt språk.

«Hvis PostgreSQL legger til støtte for å skrive FROM først i spørringer, så vil jeg gjøre det samme med SQLite.»

SQLite-skaper liker det ikke

Skaperen av SQLite, dr. Richard Hipp, er ikke spesielt begeistret for pipe-operatoren, men har likevel lagt ut en eksperimentell prototyp av SQLite som støtter den foreslåtte syntaksen.

– Jeg liker ikke pipe-operatoren. Forfatterne lister opp 11 grunner til hvorfor de mener pipe-operatoren er nyttig i seksjon 4.1.4. Jeg er fortsatt ikke overbevist, skriver Hipp i SQLite-forumet.

Etter å ha lagt ut den eksperimentelle versjonen av SQLite med støtte for pipe-syntaks, skrev han at målet hans er å holde SQLite så relevant som mulig, men uten å legge til utvidelser som ikke er standard.

Hipp sier han antagelig vil gjøre det PostgreSQL velger å gjøre:

– Hvis PostgreSQL legger til støtte for å skrive FROM først i spørringer, så vil jeg gjøre det samme med SQLite. Kopiere PostgreSQL-syntaksen. Inntil da, er jeg redd du i SQLite må nøye deg med tradisjonelle spørringer der SELECT kommer først.