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.

Colado
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
Saída formatada
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.