Formateur SQL Snowflake

Collez une requête Snowflake et obtenez du SQL propre et lisible. La syntaxe propre à Snowflake comme QUALIFY, FLATTEN et l'accès par chemin VARIANT est préservée, et les variables de liaison :name sont détectées comme paramètres.

Une requête Snowflake, 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.

Collé
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
Sortie formatée
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

La syntaxe Snowflake qu'il gère

Un formateur générique massacre la syntaxe propre au dialecte ou la refuse tout net. Voici les constructions Snowflake contre lesquelles ce formateur est testé.

QUALIFY

Reconnu comme frontière de clause, si bien que modifier un WHERE ne le dépasse jamais.

src:path.to.field

L'accès par chemin VARIANT est préservé et n'est pas confondu avec une variable de liaison :name.

:name

Les variables de liaison sont détectées et regroupées comme paramètres à remplir.

LATERAL FLATTEN(...)

L'expansion des données semi-structurées garde la forme de sa clause.

FAQ du formateur Snowflake

Prend-il en charge QUALIFY ?

Oui. QUALIFY est traité comme une clause à part entière : il est formaté correctement et une clause WHERE que vous modifiez s'arrête avant lui.

Les chemins VARIANT seront-ils confondus avec des variables de liaison ?

Les chemins à deux-points dans des données semi-structurées sont traités comme faisant partie de l'expression : un accès VARIANT ordinaire n'est donc pas signalé comme paramètre.

Puis-je modifier la clause WHERE d'une seule CTE ?

Oui. Chaque WHERE de la requête est listé sous la CTE qui le contient, si bien qu'une requête Snowflake en plusieurs étapes donne une entrée par étape. En modifier une réinjecte la nouvelle condition dans cette clause seulement, et rien d'autre ne bouge dans la requête.

LATERAL FLATTEN survit-il au formatage ?

Oui. Un appel LATERAL FLATTEN conserve sa forme de clause et sa flèche d'argument nommé au lieu d'être reformaté comme une fonction ordinaire dans le FROM, de sorte que l'expansion des données semi-structurées reste lisible.

Peut-il minifier une requête Snowflake ?

Oui. Embellir et minifier sont tous deux disponibles, et la minification laisse les littéraux de chaîne octet pour octet — ce qui compte quand la requête retourne dans une procédure stockée ou une définition de tâche, où modifier un littéral change le comportement.

Et les blocs Snowflake Scripting ?

Les instructions SQL qu'ils contiennent sont formatées normalement, tandis que le flux de contrôle BEGIN et END est recopié tel quel plutôt que réindenté comme de la syntaxe de requête. Pour un simple SELECT — le cas courant sur cette page — la question ne se pose pas.