BigQuery SQL Formatter
Füge eine BigQuery-Abfrage (GoogleSQL) ein und erhalte sie sofort formatiert. `project.dataset.table`-Pfade in Backticks, STRUCT- und ARRAY-Ausdrücke sowie @benannte Abfrageparameter werden alle korrekt behandelt.
Eine BigQuery-Abfrage, vorher und nachher
Die unformatierte Abfrage unten ist das Beispiel aus dem Editor weiter oben, und die Ausgabe ist genau das, was dieser Formatter mit den Standardoptionen dafür liefert. Nichts davon wurde von Hand nachgebessert.
WITH sessions AS (SELECT user_id, session_id, TIMESTAMP_TRUNC(event_ts, HOUR) AS hr, ARRAY_AGG(event_name ORDER BY event_ts) AS events FROM `my-project.analytics.events` WHERE event_ts BETWEEN @start_ts AND @end_ts AND platform = @platform GROUP BY user_id, session_id, hr) SELECT hr, count(DISTINCT user_id) AS users, APPROX_QUANTILES(ARRAY_LENGTH(events), 100)[OFFSET(95)] AS p95_events FROM sessions WHERE ARRAY_LENGTH(events) > @min_events GROUP BY hr ORDER BY hr WITH
sessions AS (
SELECT
user_id,
session_id,
TIMESTAMP_TRUNC(event_ts, HOUR) AS hr,
ARRAY_AGG(
event_name
ORDER BY
event_ts
) AS events
FROM
`my-project.analytics.events`
WHERE
event_ts BETWEEN @start_ts AND @end_ts
AND platform = @platform
GROUP BY
user_id,
session_id,
hr
)
SELECT
hr,
count(DISTINCT user_id) AS users,
APPROX_QUANTILES(ARRAY_LENGTH(events), 100) [OFFSET(95)] AS p95_events
FROM
sessions
WHERE
ARRAY_LENGTH(events) > @min_events
GROUP BY
hr
ORDER BY
hr BigQuery-Syntax, die er beherrscht
Ein generischer Formatter verstümmelt dialektspezifische Syntax oder lehnt sie gleich ab. Das sind die BigQuery-Konstrukte, gegen die dieser Formatter getestet wird.
@name BigQuerys benannte Abfrageparameter werden erkannt und gruppiert, sodass ein über CTEs hinweg wiederverwendeter Parameter nur einmal ausgefüllt wird.
`project.dataset.table` Vollqualifizierte Tabellenpfade in Backticks bleiben ein Stück.
UNNEST(array) Das Auflösen von Arrays behält seine Klauselstruktur.
arr[OFFSET(0)] OFFSET- und ORDINAL-Array-Indizes bleiben wortgetreu erhalten.
STRUCT<...> STRUCT-Typdeklarationen werden nicht auseinandergerissen.
FAQ zum BigQuery-Formatter
Erkennt es @benannte Parameter?
Ja. BigQuerys @name-Parameter werden im Parameter-Panel gelistet, nach Namen gruppiert, und können ausgefüllt werden, um eine ausführbare Abfrage zu erzeugen.
Zerstört es meine Tabellenpfade in Backticks?
Nein. `project.dataset.table` wird als ein einzelner in Anführungszeichen gesetzter Identifier behandelt und geht unverändert durch.
Werden UNNEST, STRUCT und ARRAY-Ausdrücke unterstützt?
Ja. UNNEST behält seine Klauselstruktur, statt wie ein gewöhnlicher Funktionsaufruf umbrochen zu werden, STRUCT-Typdeklarationen werden nicht mitten in der Deklaration zerrissen, und ARRAY_AGG mit einem inneren ORDER BY behält diese Sortierung bei der zugehörigen Aggregation.
Überstehen Array-Indizes wie OFFSET und ORDINAL die Formatierung?
Ja, wortwörtlich. Ein verketteter Ausdruck wie APPROX_QUANTILES(x, 100)[OFFSET(95)] kommt exakt so zurück, wie er geschrieben wurde, statt an der Klammer getrennt zu werden — genau das macht aus einer funktionierenden Perzentil-Abfrage einen Syntaxfehler.
Kann ich die WHERE-Klausel einer einzelnen CTE in einer langen GoogleSQL-Abfrage bearbeiten?
Ja. Das WHERE jedes WITH-Blocks erscheint separat unter dem Namen dieses Blocks. Sie öffnen den gewünschten, bearbeiten dessen Bedingungen als Baum oder Graph und lassen alle anderen Blöcke unberührt.
Funktioniert er mit BigQuery Legacy SQL?
Nein — diese Seite zielt auf GoogleSQL, den Standarddialekt von BigQuery, in dem neue Abfragen geschrieben werden sollten. Die Tabellenverweise in eckigen Klammern aus Legacy SQL werden nicht analysiert. Wer noch Legacy SQL hat, investiert die Zeit besser in eine Migration als in das Formatieren.