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.
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 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.