SQL formatting
One shortcut reflows the statement (or just the lines you've selected) using Prism's parser, so it understands CTEs, pipe syntax, and BigQuery-specific clauses rather than guessing from keywords.
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.
- Press ⌘K and run Format SQL from the command palette.
- Right-click in the editor and choose Format SQL.
Formatting is one undo step: ⌘Z puts the original back. The cursor stays where it was. If the SQL doesn’t parse, 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. This is the way to fix one messy CTE in an otherwise clean query.
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.
| Option | Values | Default |
|---|---|---|
| Formatting Mode | Preserve · Pretty · Compact | Pretty |
| Keyword Case | UPPER · lower · preserve | UPPER |
| Indent Size | 2 · 4 · 8 | 2 |
| Indent style | Spaces · Tabs | Spaces |
| Newline After Clause | on · off | on |
| Max Line Length | 80 · 100 · 120 | 80 |
| Trailing Comma | on · off | off |
| Quote Identifiers | Preserve · Always · Never | Preserve |
| AS Keyword | Preserve · Always · Never | Preserve |
| Pipe Operator Style | Standard · Left-Aligned | Standard |
| Format on Type | on · off | off |
Quote Identifiers: Always backticks every table and column name (`table`.`column`); Never strips them all. Leave it on Preserve unless you know no identifier needs quoting.
AS Keyword: Always writes id AS user_id for every alias; 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. Off by default.