SQL formatting
One shortcut reflows the statement, or just the lines you've selected, in the mode and keyword case you choose.
select u.user_id,u.country,count(*) as total from `ace-analytics.warehouse.users` u join `ace-analytics.warehouse.events` e on u.user_id=e.user_id where u.is_active=true and e.event_date>='2024-01-01' group by u.user_id,u.country order by total desc limit 100 SELECT u.user_id, u.country, count(*) AS total FROM `ace-analytics.warehouse.users` u JOIN `ace-analytics.warehouse.events` e ON u.user_id = e.user_id WHERE u.is_active = true AND e.event_date >= '2024-01-01' GROUP BY u.user_id, u.country ORDER BY total DESC LIMIT 100
Formatting a query
- Press ⇧⌘F (CtrlShiftF on Windows and Linux).
- Open the ⋮ menu at the top right of the editor and choose Format. The same command is Format SQL in the command palette and the right-click menu.
Formatting is one undo step: ⌘Z puts the original back. The cursor stays where it was. If the SQL is invalid, nothing changes.
Formatting only a selection
Select part of the statement and press the same shortcut: only the selection is reformatted, the rest is untouched.
WITH active AS ( select * from `ace-analytics.warehouse.users` where is_active=true ), recent AS ( SELECT * FROM `ace-analytics.warehouse.events` ) SELECT * FROM active
becomes
WITH active AS ( SELECT * FROM `ace-analytics.warehouse.users` WHERE is_active = true ), recent AS ( SELECT * FROM `ace-analytics.warehouse.events` ) SELECT * FROM active
Changing keyword case only
The two Convert keywords to … items in the ⋮ menu change keyword case without touching layout. Shortcuts: ⇧⌘U for UPPERCASE, ⌥⌘L for lowercase. Function names are left as written either way: count(*) stays count(*).
Choosing a formatting mode
Settings → Editor → SQL Formatting → Formatting Mode.
| Mode | Result |
|---|---|
| Pretty (default) | One clause per line, lists indented (the example at the top) |
| Compact | Single line, minimal whitespace; for logs and chat |
| Preserve | Keeps your layout; only the options below (keyword case, quoting, AS) are applied |
SELECT u.user_id,u.country,count(*) AS total FROM `ace-analytics.warehouse.users` u JOIN `ace-analytics.warehouse.events` e ON u.user_id=e.user_id WHERE u.is_active = true AND e.event_date >= '2024-01-01' GROUP BY u.user_id,u.country ORDER BY total DESC LIMIT 100 Tuning the output
All in Settings → Editor → SQL Formatting.
Three options aren’t about layout. Quote Identifiers on Always backticks every table and column name (`table`.`column`) and on Never strips them all; leave it on Preserve unless you know no identifier needs quoting. AS Keyword on Always writes id AS user_id for every alias and on Never writes id user_id. Pipe Operator Style applies to pipe syntax: Standard indents |> with the content, Left-Aligned puts |> at column 0 and indents the operator keywords.
Format on Type reformats as you go, for example after Enter. It’s off by default.