Formatador de SQL para BigQuery
Cole uma consulta do BigQuery (GoogleSQL) e receba-a formatada na hora. Caminhos `project.dataset.table` entre acentos graves, expressões STRUCT e ARRAY e parâmetros de consulta @nomeados são todos tratados.
Uma consulta BigQuery, antes e depois
A consulta sem formatação abaixo é o exemplo carregado no editor acima, e a saída é exatamente o que este formatador devolve para ela com as opções padrão. Nada foi ajustado à mão.
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 Sintaxe do BigQuery que ele trata
Um formatador genérico destrói a sintaxe específica do dialeto ou simplesmente a recusa. Estas são as construções do BigQuery contra as quais este formatador é testado.
@name Parâmetros de consulta nomeados do BigQuery são detectados e agrupados, então um parâmetro reutilizado entre CTEs é preenchido uma só vez.
`project.dataset.table` Caminhos de tabela totalmente qualificados entre acentos graves ficam em uma única peça.
UNNEST(array) O achatamento de arrays mantém a estrutura da cláusula.
arr[OFFSET(0)] Subscritos de array OFFSET e ORDINAL são preservados literalmente.
STRUCT<...> Declarações de tipo struct não são quebradas.
Perguntas frequentes do formatador de BigQuery
Ele detecta parâmetros @nomeados?
Sim. Os parâmetros @name do BigQuery são listados no painel de Parâmetros, agrupados por nome, e podem ser preenchidos para produzir uma consulta executável.
Ele vai destruir meus caminhos de tabela entre acentos graves?
Não. `project.dataset.table` é tratado como um único identificador entre aspas e passa sem alteração.
Ele trata expressões UNNEST, STRUCT e ARRAY?
Sim. UNNEST mantém a estrutura de cláusula em vez de ser reformatado como uma função comum, declarações de tipo STRUCT não são quebradas no meio, e ARRAY_AGG com um ORDER BY interno mantém essa ordenação presa à agregação a que pertence.
Índices como OFFSET e ORDINAL sobrevivem à formatação?
Sim, literalmente. Uma expressão encadeada como APPROX_QUANTILES(x, 100)[OFFSET(95)] volta exatamente como foi escrita em vez de ser quebrada no colchete, que é o que transforma uma consulta de percentil que funciona em um erro de sintaxe.
Posso editar o WHERE de uma única CTE numa consulta GoogleSQL longa?
Sim. O WHERE de cada bloco WITH aparece separadamente sob o nome daquele bloco, então você abre o que interessa, edita as condições como árvore ou grafo e deixa todos os outros blocos intocados.
Funciona com o SQL legado do BigQuery?
Não — esta página trata do GoogleSQL, o dialeto padrão do BigQuery e no qual novas consultas devem ser escritas. As referências a tabelas entre colchetes do SQL legado não são analisadas. Se você ainda tem SQL legado, migrar rende mais do que formatar.