Cum funcționează formatarea SQL
Formatarea SQL este o rescriere bazată pe lexer care parcurge fiecare token din interogare și re-emite spațiu alb în jurul său pe baza regulilor pentru dialectul ales. Semantica interogării nu se schimbă niciodată, doar aspectul.
- Alege un dialect. Apostrofurile inverse MySQL, turnările
::PostgreSQL, căile punctate ale tabelelor BigQuery și identificatorii cu paranteze pătrate T-SQL au nevoie fiecare de un tokenizator care le cunoaște. Selectorul de dialect alege ce gramatică să aplice. - Tokenizează intrarea. Formatatorul împarte interogarea într-un flux de tokenuri: cuvinte cheie (
SELECT,JOIN), identificatori, literali, operatori, paranteze și comentarii. Literalii șir și identificatorii citați sunt trecuți neatinsi, astfel încât sintaxa specifică dialectului să continue să funcționeze. - Aplică reguli de aspect. Clauzele de nivel superior (
SELECT,FROM,WHERE,GROUP BY,ORDER BY) încep pe propria linie. Expresiile separate prin virgulă în lista de selectare și coloane primesc fiecare o linie, indentată cu unitatea de indentare aleasă. - Aplică case cuvintelor cheie. Comutatorul de case a cuvintelor cheie rescrie cuvintele cheie SQL recunoscute la majuscule, minuscule sau păstrează casele intacte ale intrării. Identificatorii nu sunt niciodată atinși — numele coloanelor și tabelelor trec întotdeauna așa cum au fost scrise.
- Emite șirul formatat. Fluxul de tokenuri este reunit într-un singur șir cu caracterul de indentare (2 spații, 4 spații sau tab) și regula de linie nouă configurată. Modul live re-rulează întreaga conductă la un debounce de 200 ms pe măsură ce tastezi.
De ce să formatezi SQL
- Lizibilitatea dif-urilor în pull-request. Un CTE de 200 de linii rescris ca o singură linie transformă o revizuire de cod într-un joc de ghicit. Formatarea consistentă menține dif-ul limitat la schimbarea pe care ai făcut-o efectiv — o coloană nouă, un
JOINsuplimentar, un predicatWHEREdiferit — astfel încât revizuitorul să o poată vedea fără a descâlci spațiul alb. - Depanare mai ușoară. Când o interogare returnează un număr greșit de rânduri, primul lucru pe care îl faci este să o citești linie cu linie. SQL-ul formatat pune fiecare
JOINpe propria linie și aliniază predicateleWHEREastfel încât unANDlipsă sau unORrătăcit să se vadă dintr-o privire. - Stil de echipă consistent. Majoritatea echipelor adoptă un ghid de stil SQL (dbt Labs, GitLab, Mode Analytics își publică pe ale lor) și doresc ca fiecare interogare comisă să îl urmeze. Un formatator rulat înainte de commit elimină argumentul de stil din revizuire și lasă doar logica de discutat.
- Partajarea SQL-ului în documentație. Runbook-urile, retro-urile de incidente și documentele Notion beneficiază toate de SQL care se citește de sus în jos. SQL-ul formatat se lipește curat într-un bloc de cod și se tipărește previzibil în exporturi PDF, fără întreruperi de linie incomode la mijlocul cuvântului cheie.
Aplicații comune
Formatarea SQL apare în inginerie analitică, dezvoltare backend și operațiuni ori de câte ori o interogare trebuie citită de cineva care nu a scris-o.
- Inginerie analitică: hook pre-commit într-un proiect dbt care reformatează fiecare fișier model, astfel încât dif-urile PR să rămână limitate la schimbări logice, nu la zgomot de spațiu alb.
- Administrare bază de date: lipește o intrare de jurnal de interogare lentă pe o linie, formatează-o și parcurge ordinea de join în timp ce scrii retro-ul de incident.
- Documentație: ia o interogare dintr-o explorare Looker sau un caiet Tableau, formatează-o pentru un runbook și încorporeaz-o ca exemplu copiabil pentru rotația de gardă.
Un exemplu practic
Lipește 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; în panoul de intrare cu dialectul setat la PostgreSQL, indentare 2 spații și case cuvinte cheie MAJUSCULE. Rezultatul plasează SELECT, FROM, LEFT JOIN, WHERE, GROUP BY și ORDER BY pe propriile linii; fiecare coloană din lista de selectare și lista group-by primește propria linie indentată; iar predicatul ON stă cu un nivel de indentare mai adânc decât cuvântul cheie JOIN căruia îi aparține. Aceeași interogare prin dialectul BigQuery produce un rezultat identic pentru acest caz, dar ar păstra identificatorii citați cu apostrof invers dacă ar fi prezenți.
FAQ
Ce dialecte SQL sunt suportate?
Meniu derulant de dialecte acoperă SQL Standard, MySQL, PostgreSQL, SQLite, MariaDB, Transact-SQL (SQL Server / Azure SQL), BigQuery, Snowflake și Redshift. Biblioteca sql-formatter de bază recunoaște și DuckDB, Spark SQL, Hive, Trino, Db2, N1QL, PL/SQL, ClickHouse, TiDB și SingleStoreDB — alegerea celui mai apropiat dialect produce un rezultat rezonabil chiar și atunci când ținta exactă nu este în listă. Identificatorii, literalii șir și operatorii specifici dialectului (PostgreSQL @>, prefixele BigQuery SAFE.) sunt păstrați textual.
Validează acesta SQL-ul meu?
Nu. Formatatorul este un rescrieritor lexical, nu un analizator. Tokenizează intrarea, aplică reguli de aspect și emite rezultatul; nu verifică dacă interogarea este validă semantic, dacă tabelele referite există sau dacă sintaxa este legală în dialectul ales. Rulează rezultatul formatat prin baza de date reală (sau un linter SQL precum SQLFluff) pentru o verificare reală de corectitudine.
De ce cuvintele mele cheie sunt scrise cu majuscule?
Meniu derulant Case cuvinte cheie este implicit MAJUSCULE, care este convenția în majoritatea ghidurilor de stil SQL publicate (dbt Labs, Mode, GitLab). Comută la minuscule dacă echipa ta scrie select / from cu litere mici sau Păstrează dacă dorești ca rezultatul să păstreze orice case ai tastat. Identificatorii nu sunt niciodată afectați — doar setul de cuvinte cheie recunoscut este rescris.
Este interogarea mea încărcată undeva?
Nu. Biblioteca sql-formatter inclusă rulează în browser, formatarea are loc local pe mașina ta, iar textul interogării nu traversează niciodată rețeaua. Singurele solicitări de ieșire pe care această pagină le face sunt aceleași solicitări de analitică și reclame partajate pe care le face fiecare pagină de pe tools.ultim8soft.com; textul SQL în sine nu face parte din niciuna.
SQL-ul formatat frumos încetează să mai fie un argument de stil odată ce un formatator se ocupă de el. Instrumentul rulează exclusiv în browser, interogarea nu părăsește niciodată pagina, iar același tokenizator conștient de dialect care alimentează pachetul npm sql-formatter face rescrierea.