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.
Denne nyheten lar AI sette opp databasene for deg
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.