Cara pemformatan SQL bekerja
Pemformatan SQL adalah penulisan ulang berbasis lexer yang menelusuri setiap token dalam kueri dan mengeluarkan kembali spasi di sekitarnya berdasarkan aturan untuk dialek yang dipilih. Semantik kueri tidak pernah berubah, hanya tata letaknya.
- Pilih dialek. Backtick MySQL, cast
::PostgreSQL, jalur tabel bertitik BigQuery, dan identifikator tanda kurung siku T-SQL masing-masing memerlukan tokenizer yang mengenalinya. Pemilih dialek menentukan tata bahasa mana yang diterapkan. - Tokenisasi input. Pemformat memecah kueri menjadi aliran token: kata kunci (
SELECT,JOIN), identifier, literal, operator, tanda kurung, dan komentar. Literal string dan identifier dengan tanda kutip diteruskan tanpa perubahan agar sintaksis khusus dialek tetap berfungsi. - Terapkan aturan tata letak. Klausa tingkat atas (
SELECT,FROM,WHERE,GROUP BY,ORDER BY) dimulai pada barisnya sendiri. Ekspresi yang dipisahkan koma dalam daftar pilih dan daftar kolom masing-masing mendapat satu baris, diindentasi dengan unit indentasi yang dipilih. - Terapkan penulisan kata kunci. Tombol penulisan kata kunci menulis ulang kata kunci SQL yang dikenali menjadi huruf besar, huruf kecil, atau mempertahankan penulisan input apa adanya. Identifier tidak pernah diubah — nama kolom dan tabel selalu diteruskan seperti yang ditulis.
- Keluarkan string yang diformat. Aliran token digabungkan kembali menjadi satu string dengan karakter indentasi (2 spasi, 4 spasi, atau tab) dan aturan jeda baris yang dikonfigurasi. Mode langsung menjalankan ulang seluruh pipeline dengan debounce 200 ms saat Anda mengetik.
Mengapa mencetak SQL secara rapi
- Keterbacaan diff pull-request. CTE 200 baris yang ditulis ulang sebagai satu baris mengubah code review menjadi tebak-tebakan. Pemformatan yang konsisten menjaga diff tetap dalam cakupan perubahan yang benar-benar Anda buat — kolom baru, tambahan
JOIN, predikatWHEREyang berbeda — sehingga reviewer dapat melihatnya tanpa mengurai spasi. - Debugging lebih mudah. Saat kueri mengembalikan jumlah baris yang salah, hal pertama yang Anda lakukan adalah membacanya baris demi baris. SQL yang diformat menempatkan setiap
JOINpada barisnya sendiri dan meluruskan predikatWHEREsehinggaANDyang hilang atauORyang nyasar terlihat sekilas. - Gaya tim yang konsisten. Sebagian besar tim mengadopsi panduan gaya SQL (dbt Labs, GitLab, Mode Analytics semuanya menerbitkan milik mereka) dan menginginkan setiap kueri yang di-commit mengikutinya. Menjalankan formatter sebelum commit menghapus argumen gaya dari review dan hanya menyisakan logika untuk didiskusikan.
- Berbagi SQL dalam dokumen. Runbook, retro insiden, dan dokumen Notion semuanya mendapat manfaat dari SQL yang dibaca dari atas ke bawah. SQL yang diformat ditempel dengan rapi ke dalam blok kode berpagar dan dicetak dengan dapat diprediksi dalam ekspor PDF, tanpa jeda baris canggung di tengah kata kunci.
Aplikasi umum
Pemformatan SQL muncul dalam rekayasa analitik, pengembangan backend, dan pekerjaan operasional kapan pun kueri harus dibaca oleh seseorang yang tidak menulisnya.
- Rekayasa analitik: hook pre-commit dalam proyek dbt yang memformat ulang setiap file model sehingga diff PR tetap dalam cakupan perubahan logika, bukan perubahan spasi.
- Administrasi basis data: tempel entri log kueri lambat satu baris, format, dan telusuri urutan join sambil menulis retro insiden.
- Dokumentasi: ambil kueri dari Looker explore atau workbook Tableau, format untuk runbook, dan sematkan sebagai contoh yang dapat disalin untuk rotasi on-call.
Contoh yang dikerjakan
Tempel 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; ke panel input dengan dialek PostgreSQL, indentasi 2 spasi, dan penulisan kata kunci HURUF BESAR. Keluaran menempatkan SELECT, FROM, LEFT JOIN, WHERE, GROUP BY, dan ORDER BY pada barisnya sendiri; setiap kolom dalam daftar pilih dan daftar group-by mendapat barisnya sendiri yang diindentasi; dan predikat ON berada satu indentasi lebih dalam dari kata kunci JOIN yang dimilikinya.
FAQ
Dialek SQL apa saja yang didukung?
Dropdown dialek mencakup SQL Standar, MySQL, PostgreSQL, SQLite, MariaDB, Transact-SQL (SQL Server / Azure SQL), BigQuery, Snowflake, dan Redshift. Pustaka sql-formatter yang mendasarinya juga mengenali DuckDB, Spark SQL, Hive, Trino, Db2, N1QL, PL/SQL, ClickHouse, TiDB, dan SingleStoreDB — memilih dialek terdekat menghasilkan keluaran yang masuk akal meski target persis tidak ada dalam daftar. Identifier, literal string, dan operator khusus dialek (PostgreSQL @>, awalan BigQuery SAFE.) dipertahankan apa adanya.
Apakah ini memvalidasi SQL saya?
Tidak. Pemformat adalah penulis ulang leksikal, bukan parser. Ia mentokenisasi input, menerapkan aturan tata letak, dan mengeluarkan hasilnya; ia tidak memeriksa apakah kueri valid secara semantik, apakah tabel yang dirujuk ada, atau apakah sintaksisnya legal dalam dialek yang dipilih. Jalankan keluaran yang diformat melalui basis data yang sebenarnya (atau SQL linter seperti SQLFluff) untuk pemeriksaan kebenaran yang nyata.
Mengapa kata kunci saya diubah menjadi huruf besar?
Dropdown penulisan kata kunci default ke HURUF BESAR, yang merupakan konvensi dalam sebagian besar panduan gaya SQL yang diterbitkan (dbt Labs, Mode, GitLab). Beralih ke huruf kecil jika tim Anda menulis select / from dalam huruf kecil, atau Pertahankan jika Anda ingin keluaran mempertahankan penulisan yang Anda ketik. Identifier tidak pernah terpengaruh — hanya kumpulan kata kunci yang dikenali yang ditulis ulang.
Apakah kueri saya diunggah ke suatu tempat?
Tidak. Pustaka sql-formatter yang disertakan berjalan di browser Anda, pemformatan terjadi secara lokal di mesin Anda, dan teks kueri tidak pernah melintasi jaringan. Satu-satunya permintaan keluar yang dibuat halaman ini adalah permintaan analitik dan iklan bersama yang sama yang dibuat setiap halaman di tools.ultim8soft.com; teks SQL itu sendiri bukan bagian dari keduanya.
SQL yang dicetak rapi tidak lagi menjadi argumen gaya begitu formatter menanganinya. Alat ini berjalan sepenuhnya di browser Anda, kueri tidak pernah meninggalkan halaman, dan tokenizer yang mengenal dialek yang sama yang menggerakkan paket npm sql-formatter melakukan penulisan ulang.