§

Formátovat SQL dotazy

Dialekt
Odsazení
Velikost klíčových slov
Zlom řádku před klauzulí
§

Vložte SQL

§

Formátované SQL

České datové týmy považují formátování SQL za součást code review. GitHub PR diffs proti Snowflake warehouse jsou nečitelné, když jeden inženýr ručně formátuje 200řádkový CTE a druhý ho vloží zpět jako jeden řádek. Průchod dotazů konzistentním formátovačem před commitem zkracuje review cykly.

Jak funguje formátování SQL

Formátování SQL je přepis řízený lexerem, který prochází každý token v dotazu a znovu vydává bílé znaky kolem něj podle pravidel pro zvolený dialekt. Sémantika dotazu se nikdy nemění, pouze rozvržení.

  1. Vyberte dialekt. MySQL zpětné apostrofy, PostgreSQL :: přetypování, BigQuery tečkové cesty tabulek a T-SQL hranaté závorky identifikátorů každý potřebují tokenizér, který o nich ví. Volba dialektu určuje, která gramatika se použije.
  2. Tokenizace vstupu. Formátovač rozdělí dotaz na proud tokenů: klíčová slova (SELECT, JOIN), identifikátory, literály, operátory, závorky a komentáře. Řetězcové literály a citované identifikátory jsou předány nedotčené, takže dialektově specifická syntaxe funguje dál.
  3. Aplikace pravidel rozvržení. Klauzule nejvyšší úrovně (SELECT, FROM, WHERE, GROUP BY, ORDER BY) začínají na vlastním řádku. Výrazy oddělené čárkami v seznamu SELECT a sloupcových seznamech každý dostanou řádek, odsazený zvolenou jednotkou odsazení.
  4. Aplikace velikosti klíčových slov. Přepínač velikosti klíčových slov přepisuje rozpoznaná SQL klíčová slova na velká, malá písmena nebo ponechává velikost vstupu. Identifikátory nejsou nikdy dotčeny — názvy sloupců a tabulek vždy projdou tak, jak byly napsány.
  5. Vydání formátovaného řetězce. Token stream je spojen zpět do jediného řetězce s odsazovacím znakem (2 mezery, 4 mezery nebo tabulátor) a nakonfigurovaným pravidlem zlomu řádku. Živý režim znovu spouští celou pipeline s 200 ms debounce při psaní.

Proč pěkně tisknout SQL

  • Čitelnost PR diffů. 200řádkový CTE přepsaný jako jeden řádek mění code review v hádací hru. Konzistentní formátování udržuje diff v rozsahu skutečné změny — nový sloupec, extra JOIN, jiný WHERE predikát — takže recenzent vidí změnu bez rozmotávání bílých znaků.
  • Snadnější ladění. Když dotaz vrací špatný počet řádků, první věc, kterou uděláte, je číst ho řádek po řádku. Formátované SQL dává každý JOIN na vlastní řádek a zarovnává WHERE predikáty, takže chybějící AND nebo zbloudilé OR je vidět na první pohled.
  • Konzistentní týmový styl. Většina týmů přijímá SQL style guide (dbt Labs, GitLab, Mode Analytics všechny publikují své) a chce, aby každý commitovaný dotaz jej následoval. Formátovač spuštěný před commitem odstraňuje stylové argumenty z review a ponechává jen logiku k diskusi.
  • Sdílení SQL v dokumentaci. Runbooky, incident retros a Notion dokumenty těží z SQL, které se čte shora dolů. Formátované SQL se čistě vloží do ohrazeného bloku kódu a tiskne se předvídatelně v PDF exportech.

Běžná použití

Formátování SQL se objevuje v analytickém inženýrství, backend vývoji a operacích, kdykoli musí dotaz číst někdo, kdo ho nepsal.

  • Analytické inženýrství: pre-commit hook v dbt projektu, který přeformátuje každý modelový soubor, takže PR diffs zůstanou v rozsahu logických změn.
  • Správa databází: vložte jednořádkový záznam pomalého dotazu, naformátujte a projděte pořadí JOINů při psaní incident retro.
  • Dokumentace: vezměte dotaz z Looker nebo Tableau workbooku, naformátujte pro runbook a vložte jako zkopírovatelný příklad.

Příklad použití

Vlož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; do vstupního pole s dialektem PostgreSQL, odsazením 2 mezery a velikostí klíčových slov UPPER. Výstup umístí SELECT, FROM, LEFT JOIN, WHERE, GROUP BY a ORDER BY na vlastní řádky; každý sloupec v seznamu SELECT a GROUP BY dostane vlastní odsazený řádek; a ON predikát sedí o jedno odsazení hlouběji než JOIN klíčové slovo, ke kterému patří.

FAQ

Které SQL dialekty jsou podporovány?

Rozbalovací nabídka dialektů pokrývá Standardní SQL, MySQL, PostgreSQL, SQLite, MariaDB, Transact-SQL (SQL Server / Azure SQL), BigQuery, Snowflake a Redshift. Základní knihovna sql-formatter také rozpoznává DuckDB, Spark SQL, Hive, Trino, Db2, N1QL, PL/SQL, ClickHouse, TiDB a SingleStoreDB — výběr nejbližšího dialektu produkuje smysluplný výstup, i když přesný cíl není v seznamu. Identifikátory, řetězcové literály a dialektově specifické operátory (PostgreSQL @>, BigQuery SAFE. prefixy) jsou zachovány doslovně.

Validuje to moje SQL?

Ne. Formátovač je lexikální přepisovač, ne parser. Tokenizuje vstup, aplikuje pravidla rozvržení a vydá výsledek; nekontroluje, zda je dotaz sémanticky platný, zda referencované tabulky existují nebo zda je syntaxe v daném dialektu legální. Spusťte formátovaný výstup přes skutečnou databázi (nebo SQL linter jako SQLFluff) pro skutečnou kontrolu správnosti.

Proč jsou moje klíčová slova velkými písmeny?

Rozevírací seznam Velikost klíčových slov je výchozí na UPPER, což je konvence ve většině publikovaných SQL style guides (dbt Labs, Mode, GitLab). Přepněte na lower, pokud váš tým píše select / from malými písmeny, nebo Preserve, pokud chcete, aby výstup zachoval velikost, kterou jste napsali. Identifikátory nejsou nikdy ovlivněny — pouze rozpoznaná sada klíčových slov je přepsána.

Je můj dotaz někam nahráván?

Ne. Knihovna sql-formatter běží ve vašem prohlížeči, formátování probíhá lokálně na vašem počítači a text dotazu nikdy nepřekročí síť. Jediné odchozí požadavky, které tato stránka provádí, jsou stejné sdílené analytics a reklamní požadavky jako každá stránka na tools.ultim8soft.com; samotný SQL text není součástí žádného z nich.

Pěkně vytištěné SQL přestává být stylovým argumentem, jakmile ho zpracovává formátovač. Nástroj běží zcela ve vašem prohlížeči, dotaz nikdy neopustí stránku a stejný dialektově uvědomělý tokenizér, který pohání npm balíček sql-formatter, dělá přepis.