Formateador de SQL para Snowflake

Pega una consulta de Snowflake y obtén SQL limpio y legible. La sintaxis propia de Snowflake como QUALIFY, FLATTEN y el acceso por ruta a VARIANT se conserva, y las variables de enlace :name se detectan como parámetros.

Una consulta Snowflake, antes y después

La consulta sin formato de abajo es el ejemplo cargado en el editor de arriba, y la salida es exactamente lo que devuelve este formateador con las opciones por defecto. No se ha retocado nada a mano.

Pegado
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
Salida formateada
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

Sintaxis de Snowflake que soporta

Un formateador genérico destroza la sintaxis propia del dialecto o la rechaza directamente. Estas son las construcciones de Snowflake contra las que se prueba este formateador.

QUALIFY

Se reconoce como límite de cláusula, así que al editar un WHERE nunca se pasa de largo.

src:path.to.field

El acceso por ruta a VARIANT se conserva y no se confunde con una variable de enlace :name.

:name

Las variables de enlace se detectan y se agrupan como parámetros rellenables.

LATERAL FLATTEN(...)

La expansión de datos semiestructurados mantiene la forma de su cláusula.

Preguntas frecuentes del formateador de Snowflake

¿Admite QUALIFY?

Sí. QUALIFY se trata como una cláusula de pleno derecho, así que se formatea correctamente y la cláusula WHERE que editas se detiene antes de ella.

¿Se confundirán las rutas VARIANT con variables de enlace?

Las rutas con dos puntos hacia datos semiestructurados se tratan como parte de la expresión, así que el acceso normal a VARIANT no se reporta como parámetro.

¿Puedo editar el WHERE de una sola CTE?

Sí. Cada WHERE de la consulta aparece listado por la CTE que lo contiene, así que una consulta de Snowflake de varios pasos te da una entrada por paso. Al editar uno, la nueva condición se inserta solo en esa cláusula y nada más de la consulta se mueve.

¿Sobrevive LATERAL FLATTEN al formateo?

Sí. Una llamada LATERAL FLATTEN conserva su forma de cláusula y su flecha de argumento con nombre en lugar de reformatearse como una función normal dentro del FROM, de modo que la expansión de datos semiestructurados sigue siendo legible.

¿Puede minificar una consulta de Snowflake?

Sí. Embellecer y minificar están disponibles, y la minificación deja los literales de cadena byte a byte tal cual, algo que importa cuando la consulta vuelve a un procedimiento almacenado o a la definición de una tarea, donde cambiar un literal cambia el comportamiento.

¿Y los bloques de Snowflake Scripting?

Las sentencias SQL de dentro se formatean con normalidad, mientras que el control de flujo con BEGIN y END se deja pasar en lugar de reindentarse como si fuera sintaxis de consulta. Para un único SELECT, que es el caso habitual en esta página, no llega a plantearse.