Come funziona la formattazione SQL
La formattazione SQL è una riscrittura guidata da un lexer che percorre ogni token della query e lo rielabora con gli spazi bianchi appropriati in base alle regole del dialetto scelto. La semantica della query non cambia mai, solo il layout.
- Scegli un dialetto. I backtick di MySQL, i cast
::di PostgreSQL, i percorsi di tabella puntati di BigQuery e gli identificatori tra parentesi quadre di T-SQL richiedono ciascuno un tokenizzatore che li riconosca. Il selettore di dialetto sceglie quale grammatica applicare. - Tokenizza l’input. Il formattatore suddivide la query in un flusso di token: parole chiave (
SELECT,JOIN), identificatori, letterali, operatori, parentesi e commenti. I letterali stringa e gli identificatori tra virgolette vengono trasmessi invariati affinché la sintassi specifica del dialetto continui a funzionare. - Applica le regole di layout. Le clausole di primo livello (
SELECT,FROM,WHERE,GROUP BY,ORDER BY) iniziano su una propria riga. Le espressioni separate da virgola nella lista di selezione e nelle liste di colonne ricevono ciascuna una riga, indentata dell’unità di indentazione scelta. - Applica il casing delle parole chiave. Il selettore di casing riscrive le parole chiave SQL riconosciute in maiuscolo, minuscolo o mantiene il casing originale. Gli identificatori non vengono mai toccati — i nomi di colonne e tabelle appaiono sempre così come sono stati scritti.
- Emetti la stringa formattata. Il flusso di token viene riassemblato in un’unica stringa con il carattere di indentazione (2 spazi, 4 spazi o tabulazione) e la regola di interruzione di riga configurata. La modalità live riesegue l’intera pipeline con un debounce di 200 ms mentre digiti.
Perché abbellire SQL
- Leggibilità dei diff di pull request. Un CTE di 200 righe riscritto su una sola riga trasforma la code review in un gioco di indovinelli. La formattazione coerente mantiene il diff limitato alla modifica che hai effettivamente apportato — una nuova colonna, un
JOINaggiuntivo, un predicatoWHEREdiverso — così il revisore può vederlo senza dover districare spazi bianchi. - Debug più semplice. Quando una query restituisce un conteggio di righe errato, la prima cosa da fare è leggerla riga per riga. L’SQL formattato mette ogni
JOINsu una propria riga e allinea i predicatiWHERE, così unANDmancante o unORfuori posto saltano all’occhio. - Stile del team coerente. La maggior parte dei team adotta una guida di stile SQL (dbt Labs, GitLab, Mode Analytics le pubblicano tutte) e vuole che ogni query committata la segua. Un formattatore eseguito prima del commit elimina la discussione sullo stile dalla review e lascia solo la logica da esaminare.
- Condividere SQL nella documentazione. Runbook, retro di incidenti e documenti Notion beneficiano di un SQL che si legge dall’alto verso il basso. L’SQL formattato si incolla in modo pulito in un blocco di codice delimitato e viene stampato in modo prevedibile nelle esportazioni PDF, senza interruzioni di riga imbarazzanti a metà parola chiave.
Applicazioni comuni
La formattazione SQL compare in analytics engineering, sviluppo backend e operazioni ogni volta che una query deve essere letta da qualcuno che non l’ha scritta.
- Analytics engineering: hook di pre-commit in un progetto dbt che riformatta ogni file di modello in modo che i diff di PR rimangano limitati alle modifiche di logica e non al rumore di spaziatura.
- Amministrazione di database: incollare una voce di slow-query log su una riga, formattarla e percorrere l’ordine dei join mentre si scrive la retro dell’incidente.
- Documentazione: estrarre una query da un explore di Looker o da un workbook di Tableau, formattarla per un runbook e incorporarla come esempio pronto da copiare per la rotazione di guardia.
Un esempio pratico
Incolla SELECT u.id,u.email,COUNT(o.id) FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at > '2024-01-01' GROUP BY u.id,u.email ORDER BY u.id; nel pannello di input con il dialetto impostato su PostgreSQL, indentazione di 2 spazi e casing MAIUSCOLO. L’output posiziona SELECT, FROM, LEFT JOIN, WHERE, GROUP BY e ORDER BY su righe proprie; ogni colonna nella lista di selezione e nella lista di group-by riceve la propria riga indentata; e il predicato ON si trova un livello di indentazione più in profondità rispetto alla parola chiave JOIN a cui appartiene.
FAQ
Quali dialetti SQL sono supportati?
Il menu a discesa dei dialetti copre SQL standard, MySQL, PostgreSQL, SQLite, MariaDB, Transact-SQL (SQL Server / Azure SQL), BigQuery, Snowflake e Redshift. La libreria sql-formatter sottostante riconosce anche DuckDB, Spark SQL, Hive, Trino, Db2, N1QL, PL/SQL, ClickHouse, TiDB e SingleStoreDB — scegliere il dialetto più vicino produce un output sensato anche quando il target esatto non è nella lista. Identificatori, letterali stringa e operatori specifici del dialetto (PostgreSQL @>, prefissi BigQuery SAFE.) vengono preservati così come sono.
Questo strumento valida il mio SQL?
No. Il formattatore è un riscrittore lessicale, non un parser. Tokenizza l’input, applica le regole di layout e produce il risultato; non verifica se la query è semanticamente valida, se le tabelle referenziate esistono o se la sintassi è legale nel dialetto scelto. Esegui l’output formattato nel database reale (o in un linter SQL come SQLFluff) per una vera verifica di correttezza.
Perché le mie parole chiave vengono scritte in maiuscolo?
Il menu a discesa del casing delle parole chiave è impostato per default su MAIUSCOLO, che è la convenzione della maggior parte delle guide di stile SQL pubblicate (dbt Labs, Mode, GitLab). Passa a minuscolo se il tuo team scrive select / from in minuscolo, o a Mantieni se vuoi che l’output conservi il casing che hai digitato. Gli identificatori non sono mai influenzati — solo il set di parole chiave riconosciute viene riscritto.
La mia query viene caricata da qualche parte?
No. La libreria sql-formatter incorporata gira nel tuo browser, la formattazione avviene localmente sul tuo computer e il testo della query non attraversa mai la rete. Le uniche richieste in uscita che questa pagina effettua sono le stesse richieste di analytics e pubblicità che ogni pagina di tools.ultim8soft.com fa; il testo SQL in sé non fa parte di nessuna di esse.
L’SQL formattato in modo uniforme smette di essere un argomento di stile non appena un formattatore se ne occupa. Lo strumento gira interamente nel tuo browser, la query non esce mai dalla pagina, e lo stesso tokenizzatore consapevole del dialetto che alimenta il pacchetto npm sql-formatter esegue la riscrittura.