Formateur SQL BigQuery
Collez une requête BigQuery (GoogleSQL) et obtenez-la formatée instantanément. Les chemins `project.dataset.table` entre accents graves, les expressions STRUCT et ARRAY et les paramètres de requête @nommés sont tous gérés.
Une requête BigQuery, avant et après
La requête non formatée ci-dessous est l'exemple chargé dans l'éditeur plus haut, et la sortie est exactement ce que ce formateur en renvoie avec les options par défaut. Rien n'a été retouché à la main.
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 La syntaxe BigQuery qu'il gère
Un formateur générique massacre la syntaxe propre au dialecte ou la refuse tout net. Voici les constructions BigQuery contre lesquelles ce formateur est testé.
@name Les paramètres de requête nommés de BigQuery sont détectés et regroupés : un paramètre réutilisé à travers plusieurs CTE n'est rempli qu'une fois.
`project.dataset.table` Les chemins de table pleinement qualifiés entre accents graves restent d'un seul tenant.
UNNEST(array) L'aplatissement de tableaux conserve la structure de sa clause.
arr[OFFSET(0)] Les indices de tableau OFFSET et ORDINAL sont préservés tels quels.
STRUCT<...> Les déclarations de type struct ne sont pas découpées.
FAQ du formateur BigQuery
Détecte-t-il les paramètres @nommés ?
Oui. Les paramètres @name de BigQuery sont listés dans le panneau Paramètres, regroupés par nom, et peuvent être remplis pour produire une requête exécutable.
Va-t-il abîmer mes chemins de table entre accents graves ?
Non. `project.dataset.table` est traité comme un identifiant quoté unique et passe sans modification.
Gère-t-il les expressions UNNEST, STRUCT et ARRAY ?
Oui. UNNEST garde sa structure de clause au lieu d'être reformaté comme un appel de fonction ordinaire, les déclarations de type STRUCT ne sont pas coupées en pleine déclaration, et ARRAY_AGG avec un ORDER BY interne conserve ce tri attaché à l'agrégat auquel il appartient.
Les indices de tableau comme OFFSET et ORDINAL survivent-ils au formatage ?
Oui, mot pour mot. Une expression chaînée comme APPROX_QUANTILES(x, 100)[OFFSET(95)] revient exactement telle qu'écrite au lieu d'être coupée au crochet — ce qui est précisément ce qui transforme une requête de percentile fonctionnelle en erreur de syntaxe.
Puis-je modifier la clause WHERE d'une seule CTE dans une longue requête GoogleSQL ?
Oui. Le WHERE de chaque bloc WITH apparaît séparément sous le nom de ce bloc : vous ouvrez celui qui vous intéresse, éditez ses conditions en arbre ou en graphe, et laissez tous les autres blocs intacts.
Fonctionne-t-il avec le SQL hérité de BigQuery ?
Non — cette page vise GoogleSQL, le dialecte standard de BigQuery et celui dans lequel les nouvelles requêtes devraient être écrites. Les références de tables entre crochets du SQL hérité ne sont pas analysées. S'il vous reste du SQL hérité, le migrer vaut mieux que le formater.