Hogyan működik az SQL formázás
Az SQL formázás egy lexer-vezérelt átírás, amely végigjárja a lekérdezés minden tokenjét, és szóközöket helyez el köréjük a kiválasztott dialektus szabályai szerint. A lekérdezés szemantikája soha nem változik, csak a megjelenítés.
- Válassz egy dialektust. A MySQL backtick-ek, PostgreSQL
::cast-ok, BigQuery pontozott tábla útvonalak és T-SQL szögletes zárójeles azonosítók mind olyan tokenizálót igényelnek, ami ismeri őket. A dialektus választó határozza meg, melyik nyelvtant kell alkalmazni. - Bemenet tokenizálása. A formázó a lekérdezést tokenek folyamára bontja: kulcsszavak (
SELECT,JOIN), azonosítók, literálok, operátorok, zárójelek és megjegyzések. A karakterlánc literálok és idézőjeles azonosítók érintetlenül kerülnek átadásra. - Elrendezési szabályok alkalmazása. A legfelső szintű záradékok (
SELECT,FROM,WHERE,GROUP BY,ORDER BY) saját sorban kezdődnek. A vesszővel elválasztott kifejezések a select listában és oszloplistákban mindegyik kap egy sort, behúzva a kiválasztott behúzási egységgel. - Kulcsszó kis- és nagybetű alkalmazása. A kulcsszó kis- és nagybetű kapcsoló átírja a felismert SQL kulcsszavakat nagybetűsre, kisbetűsre, vagy megtartja a bemeneti kis- és nagybetűt. Az azonosítók soha nem kerülnek módosításra.
- Formázott karakterlánc kiadása. A token folyam visszaillesztésre kerül egyetlen karakterláncba a behúzási karakterrel (2 szóköz, 4 szóköz vagy tabulátor) és a konfigurált sortörés szabállyal. Az élő mód újrafuttatja a teljes folyamatot 200 ms-es fésüléssel gépelés közben.
Miért szépítsd az SQL-t
- Pull-request diff olvashatóság. Egy 200 soros CTE egyetlen sorként átírva találgatássá teszi a kód áttekintést. Az egységes formázás a diff-et a ténylegesen végzett változtatásra korlátozza — egy új oszlop, egy extra
JOIN, egy másikWHEREfeltétel — így a felülvizsgáló látja anélkül, hogy szóközöket kellene kibogoznia. - Könnyebb hibakeresés. Amikor egy lekérdezés rossz sorszámot ad vissza, az első dolog, amit teszel, sorról sorra olvasod. A formázott SQL minden
JOIN-t a saját sorába tesz és összehangolja aWHEREfeltételeket, így egy hiányzóANDvagy egy eltévedtORelső pillantásra látszik. - Egységes csapat stílus. A legtöbb csapat elfogad egy SQL stílus útmutatót (dbt Labs, GitLab, Mode Analytics mind közzétették a sajátjukat), és azt szeretnék, hogy minden commit-elt lekérdezés kövesse azt. A commit előtt futtatott formázó eltávolítja a stílus vitát a review-ból.
- SQL megosztása dokumentációban. A runbook-ok, incidens retrók és Notion dokumentumok mind profitálnak az SQL-ből, ami felülről lefelé olvasható. A formázott SQL tisztán illeszthető be egy kódblokkba.
Gyakori felhasználások
Az SQL formázás az analitikai mérnöki, backend fejlesztési és üzemeltetési munkák során merül fel, amikor egy lekérdezést olyan valakinek kell elolvasnia, aki nem írta.
- Analitikai mérnökség: pre-commit hook egy dbt projektben, ami minden modell fájlt újraformáz, hogy a PR diff-ek a logikai változásokra korlátozódjanak.
- Adatbázis adminisztráció: illessz be egy egysoros lassú lekérdezés naplóbejegyzést, formázd ki, és menj végig a join sorrenden az incidens retró írása közben.
- Dokumentáció: vegyél ki egy lekérdezést egy Looker explore-ból vagy Tableau munkafüzetből, formázd ki egy runbook-hoz.
Egy gyakorlati példa
Illessz be 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; a beviteli ablakba PostgreSQL dialektussal, 2 szóköz behúzással és NAGYBETŰS kulcsszó kis- és nagybetűvel. A kimenet a SELECT, FROM, LEFT JOIN, WHERE, GROUP BY és ORDER BY záradékokat saját sorba helyezi; minden oszlop a select listában és a group-by listában saját behúzott sort kap.
FAQ
Mely SQL dialektusok támogatottak?
A dialektus legördülő menü tartalmazza a Standard SQL, MySQL, PostgreSQL, SQLite, MariaDB, Transact-SQL (SQL Server / Azure SQL), BigQuery, Snowflake és Redshift dialektusokat. Az alapul szolgáló sql-formatter könyvtár a DuckDB, Spark SQL, Hive, Trino, Db2, N1QL, PL/SQL, ClickHouse, TiDB és SingleStoreDB dialektusokat is ismeri.
Validálja ez az SQL-emet?
Nem. A formázó egy lexikális átíró, nem egy elemző. Tokenizálja a bemenetet, alkalmazza az elrendezési szabályokat, és kiadja az eredményt; nem ellenőrzi, hogy a lekérdezés szemantikailag érvényes-e. Futtasd a formázott kimenetet a tényleges adatbázison egy valódi helyességellenőrzéshez.
Miért lesznek a kulcsszavaim nagybetűsek?
A Kulcsszó kis- és nagybetű legördülő menü alapértelmezés szerint NAGYBETŰS, ami a legtöbb publikált SQL stílus útmutatóban szokásos. Válts kisbetűs-re, ha a csapatod a select / from kisbetűs írását használja, vagy Megtartás-ra, ha a kimenet megtartaná a beírt kis- és nagybetűt.
Feltöltődik a lekérdezésem bárhová?
Nem. A használt sql-formatter könyvtár a böngésződben fut, a formázás helyben történik a gépeden, és a lekérdezés szövege soha nem megy át a hálózaton.
A szép SQL megszűnik stílus vitának lenni, ha egy formázó kezeli. Az eszköz teljes egészében a böngésződben fut, a lekérdezés soha nem hagyja el az oldalt, és ugyanaz a dialektus-tudatos tokenizáló végzi az átírást, ami a sql-formatter npm csomagot működteti.