Formatador de SQL para Snowflake

Cole uma consulta Snowflake e receba SQL limpo e legível. A sintaxe específica do Snowflake, como QUALIFY, FLATTEN e acesso por caminho a VARIANT, é preservada, e variáveis de bind :name são detectadas como parâmetros.

Uma consulta Snowflake, 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 ranked AS (SELECT customer_id, order_id, total, src:shipping.country::string AS country, row_number() OVER (PARTITION BY customer_id ORDER BY total DESC) AS rn FROM orders WHERE order_ts >= :start_date AND region = :region) SELECT customer_id, order_id, total, country FROM ranked WHERE rn = 1 AND total > :min_total QUALIFY row_number() OVER (ORDER BY total DESC) <= 100 ORDER BY total DESC
Saída formatada
WITH
  ranked AS (
    SELECT
      customer_id,
      order_id,
      total,
      src:shipping.country::STRING AS country,
      row_number() OVER (
        PARTITION BY
          customer_id
        ORDER BY
          total DESC
      ) AS rn
    FROM
      orders
    WHERE
      order_ts >=:start_date
      AND region =:region
  )
SELECT
  customer_id,
  order_id,
  total,
  country
FROM
  ranked
WHERE
  rn = 1
  AND total >:min_total
QUALIFY
  row_number() OVER (
    ORDER BY
      total DESC
  ) <= 100
ORDER BY
  total DESC

Sintaxe do Snowflake 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 Snowflake contra as quais este formatador é testado.

QUALIFY

Reconhecida como limite de cláusula, então editar um WHERE nunca passa dela.

src:path.to.field

O acesso por caminho a VARIANT é preservado e não é confundido com uma variável de bind :name.

:name

Variáveis de bind são detectadas e agrupadas como parâmetros preenchíveis.

LATERAL FLATTEN(...)

A expansão de dados semiestruturados mantém a forma da cláusula.

Perguntas frequentes do formatador de Snowflake

Ele suporta QUALIFY?

Sim. O QUALIFY é tratado como uma cláusula de verdade, então é formatado corretamente e a cláusula WHERE que você edita para antes dele.

Caminhos VARIANT vão ser confundidos com variáveis de bind?

Caminhos com dois-pontos em dados semiestruturados são tratados como parte da expressão, então o acesso normal a VARIANT não é reportado como parâmetro.

Posso editar o WHERE de uma única CTE?

Sim. Cada WHERE da consulta é listado pela CTE que o contém, então uma consulta Snowflake de várias etapas dá uma entrada por etapa. Ao editar uma, a nova condição é inserida apenas naquela cláusula e nada mais na consulta se mexe.

LATERAL FLATTEN sobrevive à formatação?

Sim. Uma chamada LATERAL FLATTEN mantém o formato de cláusula e a seta de argumento nomeado em vez de ser reformatada como uma função comum dentro do FROM, então a expansão de dados semiestruturados continua legível.

Dá para minificar uma consulta Snowflake?

Sim. Embelezar e minificar estão disponíveis, e a minificação deixa os literais de texto byte a byte como estavam — o que importa quando a consulta volta para um procedimento armazenado ou para a definição de uma task, onde mudar um literal muda o comportamento.

E os blocos do Snowflake Scripting?

Os comandos SQL de dentro são formatados normalmente, enquanto o controle de fluxo com BEGIN e END passa direto em vez de ser reindentado como se fosse sintaxe de consulta. Para um único SELECT, o caso usual nesta página, isso nem chega a aparecer.