Acronimo di Structured Query Language, SQL è un linguaggio ampiamente utilizzato per la gestione e la manipolazione dei dati all’interno di database relazionali. È stato sviluppato per permettere agli utenti di interrogare, aggiornare e gestire basi di dati in modo efficace e strutturato.
Le prime versioni di SQL nacquero nei laboratori IBM nel 1974, ben 50 anni fa, sotto la guida di Donald Chamberlin e Raymond Boyce. Dopo la “promozione” a standard nel 1986 da parte di ANSI (American National Standards Institute), negli anni successivi seguirono tutta una serie di versioni migliorate di SQL. A distanza di così tanto tempo, anche oggi SQL resta fondamentale per la gestione dei database relazionali ed è ampiamente utilizzato nell’industria del software e nelle applicazioni aziendali. Ci sono però ancora ampi margini di sviluppo: ad esempio, Vanna permette di chattare con i database SQL usando l’IA.
pql, le query SQL diventano più semplici e più facilmente modificabili
Nel panorama dello sviluppo software, ancora ampiamente caratterizzato dall’utilizzo di SQL, RunReveal ha deciso di presentare una soluzione concreta che aiuta i programmatori a superare alcune delle più importanti limitazioni di SQL. La proposta di RunReveal si chiama pql, acronimo di Pipelined Query Language.
SQL, si sa, è un linguaggio consolidato ma la sua struttura spesso impone modifiche sostanziali per l’aggiunta di operazioni come GROUP, AGGREGATE, JOIN o subquery. L’idea alla base di pql è quella di estendere alle interrogazioni SQL la filosofia dei sistemi Unix-like che si basano sulla struttura “a pipeline“.
Il termine pipeline si riferisce a un flusso di dati o processi organizzati in modo sequenziale, in cui l’output di una fase diventa l’input per la fase successiva. È un concetto comune nell’ambito dell’elaborazione dati e delle operazioni di trasformazione. In pql, la pipeline rappresenta una sequenza di operazioni di interrogazione concatenate. Ogni passo della pipeline riceve i dati elaborati dal passo precedente e ne produce una nuova versione che sarà l’input per il passo successivo. Questo approccio consente di costruire interrogazioni complesse in modo modulare, estendendo progressivamente la sequenza di operazioni desiderate. Insomma, con pql si ha a che fare con una “reinterpretazione” completa, flessibile, versatile e potente di SQL.
Uno strumento come pql è progettato per essere SQL-agnostic: significa che consente di accedere alle funzioni del database sottostante, facilitando l’integrazione con prodotti esistenti che supportano SQL.
Esempi di utilizzo di pql
Sviluppato nel linguaggio Go e distribuito sotto licenza Apache 2.0, pql rende semplici e più facilmente gestibili anche le query SQL più complesse.
Date un’occhiata al sito di esempio su pql: RunReveal fornisce alcuni esempi pratici ed è possibile intervenire direttamente sulla sintassi pql per ottenere una conversione immediata in SQL.
Si prenda ad esempio la seguente query pql che estrae dalla tabella users
, contenuta in un certo database gli utenti, che usano un account Gmail. L’obiettivo è conteggiare (count
) in quanti usano un account Gmail:
users
| where like(email, 'gmail')
| count
La query diventa automaticamente la seguente interrogazione SQL:
WITH
"__subquery0" AS (
SELECT
*
FROM
"users"
WHERE
like ("email", 'gmail')
)
SELECT
COUNT(*) AS "count()"
FROM
"__subquery0";
Nella stessa pagina (scorrerla fino in fondo) sono anche indicati i riferimenti agli operatori e alle funzioni attualmente supportati da pql.
Come importare la libreria pql in Go e ottenere query SQL funzionanti
Il linguaggio pql opera attraverso un processo di “compilazione” che traduce le query pql in istruzioni SQL. La libreria pql in Go fornisce una funzione chiamata Compile
che prende in input una query pql sotto forma di stringa e restituisce l’istruzione SQL corrispondente, insieme a eventuali errori.
Utilizzando codice Go, linguaggio impossibile da non conoscere, si può importare la libreria pql e passare la sintassi da tradurre in SQL:
package main
import (
"github.com/runreveal/pql"
)
func main() {
sql, err := pql.Compile("users | project id, email | limit 5")
if err != nil {
panic(err)
}
println(sql)
}
Eseguendo questo codice Go, ecco che si otterrà la seguente query SQL:
WITH "__subquery0" AS (SELECT "id" AS "id", "email" AS "email" FROM "users")
SELECT * FROM "__subquery0" LIMIT 5;
L’obiettivo di RunReveal è fare di pql il linguaggio predefinito, in primis, per i professionisti della sicurezza. Con la condivisione del codice sotto licenza Apache 2.0, è possibile adottare pql senza vincolarsi ad alcun fornitore.
Credit immagine in apertura: iStock.com – islander11