Snowflake SQL Formatter

Füge eine Snowflake-Abfrage ein und erhalte sauberes, lesbares SQL. Snowflake-spezifische Syntax wie QUALIFY, FLATTEN und VARIANT-Pfadzugriff bleibt erhalten, und :name-Bind-Variablen werden als Parameter erkannt.

Eine Snowflake-Abfrage, vorher und nachher

Die unformatierte Abfrage unten ist das Beispiel aus dem Editor weiter oben, und die Ausgabe ist genau das, was dieser Formatter mit den Standardoptionen dafür liefert. Nichts davon wurde von Hand nachgebessert.

Eingefügt
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
Formatierte Ausgabe
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

Snowflake-Syntax, die er beherrscht

Ein generischer Formatter verstümmelt dialektspezifische Syntax oder lehnt sie gleich ab. Das sind die Snowflake-Konstrukte, gegen die dieser Formatter getestet wird.

QUALIFY

Wird als Klauselgrenze erkannt, sodass das Bearbeiten eines WHERE nie darüber hinausläuft.

src:path.to.field

VARIANT-Pfadzugriff bleibt erhalten und wird nicht mit einer :name-Bind-Variable verwechselt.

:name

Bind-Variablen werden erkannt und als ausfüllbare Parameter gruppiert.

LATERAL FLATTEN(...)

Das Entfalten halbstrukturierter Daten behält seine Klauselform.

FAQ zum Snowflake-Formatter

Unterstützt es QUALIFY?

Ja. QUALIFY wird als vollwertige Klausel behandelt, deshalb wird es korrekt formatiert und eine WHERE-Klausel, die du bearbeitest, endet davor.

Werden VARIANT-Pfade mit Bind-Variablen verwechselt?

Doppelpunkt-Pfade in halbstrukturierte Daten werden als Teil des Ausdrucks behandelt, deshalb wird normaler VARIANT-Zugriff nicht als Parameter gemeldet.

Kann ich die WHERE-Klausel einer einzelnen CTE bearbeiten?

Ja. Jedes WHERE der Abfrage wird nach der CTE aufgeführt, die es enthält, sodass eine mehrstufige Snowflake-Abfrage einen Eintrag pro Stufe ergibt. Beim Bearbeiten landet die neue Bedingung nur in dieser Klausel, und nichts anderes in der Abfrage verschiebt sich.

Übersteht LATERAL FLATTEN die Formatierung?

Ja. Ein LATERAL FLATTEN-Aufruf behält seine Klauselform und seinen Pfeil für benannte Argumente, statt wie eine gewöhnliche Funktion in der FROM-Liste umbrochen zu werden. Die Expansion halbstrukturierter Daten bleibt so lesbar.

Kann er eine Snowflake-Abfrage minifizieren?

Ja. Verschönern und Minifizieren stehen beide bereit, und das Minifizieren lässt String-Literale Byte für Byte unangetastet — wichtig, wenn die Abfrage zurück in eine gespeicherte Prozedur oder eine Task-Definition geht, wo ein verändertes Literal das Verhalten ändert.

Und was ist mit Snowflake-Scripting-Blöcken?

Die SQL-Anweisungen darin werden normal formatiert, während der Steuerfluss mit BEGIN und END durchgereicht statt wie Abfragesyntax neu eingerückt wird. Bei einem einzelnen SELECT — dem üblichen Fall auf dieser Seite — stellt sich die Frage gar nicht.