§

Format kueri SQL

Dialek
Indentasi
Penulisan kata kunci
Jeda baris sebelum klausa
§

Tempel SQL

§

SQL yang Diformat

Tim platform data di Tokopedia dan GoTo menjadikan pemformatan SQL sebagai gerbang wajib dalam setiap pull-request: kueri BigQuery yang digunakan untuk analisis perilaku pengguna dan rekomendasi produk diformat ulang secara otomatis oleh pre-commit hook sebelum masuk ke repositori dbt, sehingga diff PR hanya memperlihatkan perubahan logika. Bank Mandiri mengandalkan Snowflake untuk pelaporan keuangan dan rekonsiliasi transaksi antar-core banking, dan tim data engineering-nya mengikuti panduan gaya sql-formatter agar setiap kueri yang di-commit dapat dibaca oleh analis yang tidak ikut menulisnya. Pengembang yang membangun integrasi pembayaran Bukalapak dengan Athena dan PrestoDB juga memakai formatter ini untuk memeriksa payload webhook baris demi baris bersama tim QA sebelum rilis ke produksi.

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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, predikat WHERE yang 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 JOIN pada barisnya sendiri dan meluruskan predikat WHERE sehingga AND yang hilang atau OR yang 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.