Ausführen von SQL-Anweisungen

Mit Snowflake CLI können Sie SQL-Abfragen, Ad-hoc-Abfragen oder Dateien, die SQL-Abfragen enthalten, ausführen, indem Sie den Befehl snow sql verwenden.

Um eine Ad-hoc-Abfrage auszuführen, führen Sie einen Befehl ähnlich dem folgenden aus:

snow sql -q "SELECT * FROM FOO"
Copy

Um eine Datei mit einer SQL-Abfrage auszuführen, führen Sie einen Befehl ähnlich dem folgenden aus:

snow sql -f my_query.sql
Copy

Der snow sql-Befehl kann mehrere Anweisungen ausführen. In diesem Fall werden mehrere Resultsets zurückgegeben. Wenn Sie beispielsweise Folgendes ausführen:

snow sql  -q "select 'a', 'b'; select 'c', 'd';"
Copy

Dann führt dies zu folgender Ausgabe:

select 'a', 'b';
+-----------+
| 'A' | 'B' |
|-----+-----|
| a   | b   |
+-----------+

select 'c', 'd';
+-----------+
| 'C' | 'D' |
|-----+-----|
| c   | d   |
+-----------+

Weitere Informationen dazu finden Sie unter dem Befehl snow sql.

Verwenden von Variablen für SQL-Vorlagen

In bestimmten Situationen möchten Sie Ihre SQL-Abfragen vielleicht kontextabhängig ändern. Der snow sql-Befehl unterstützt die clientseitige Variablensubstitution, mit der Sie im Befehl Variablen verwenden können, die vor der Übermittlung der Abfrage lokal aufgelöst werde. Variablen in der SQL-Zeichenfolge haben die Form <% variable_name %>, und die Option -D (oder --variable) gibt den Wert der Variable an.

Bemerkung

Sie können derzeit die Syntax SnowSQL &variable_name und <% variable_name %> für Vorlagen verwenden. Snowflake empfiehlt jedoch die Verwendung der <% variable_name %>-Syntax.

Um beispielsweise eine Datenbank über eine clientseitige Variable anzugeben, können Sie einen Befehl ähnlich dem folgenden eingeben:

snow sql -q "select * from <% database %>.logs" -D "database=dev"
Copy

Bei der Ausführung ersetzt der Befehl den Wert dev in der Variable <% database %>, um den Dateinamen dev.logs zu erstellen und sendet dann die select * from dev.logs SQL-Abfrage zur Verarbeitung an Snowflake.

Sie können auch mehrere variable Eingaben wie folgt festlegen:

snow sql \
-q "grant usage on database <% database %> to <% role %>" \
-D "database=dev" \
-D "role=eng_rl"
Copy

Dieses Beispiel generiert die folgende SQL-Abfrage:

grant usage on database dev to eng_rl
Copy

Speichern von Variablen in der snowflake.yml-Projektdefinitionsdatei

Die Angabe von Variablen als snow sql-Befehlszeilenoptionen ist vielleicht nicht immer praktisch, oder Sie möchten vielleicht keine sensiblen Werte in der Befehlszeile angeben. In solchen Fällen können Sie Variablen und Werte in der Projektdefinitionsdatei snowflake.yml definieren. Dann können Sie die Variablennamen einfach im Format <% ctx.env.<variable_name> %> angeben, anstatt die Option -D "<variable> = <value>" zu verwenden.

Anhand des Beispiels aus dem vorigen Abschnitt könnten Sie die Datenbank- und Rollenvariablen in der Datei snowflake.yml speichern und die Abfrage wie folgt ändern:

snow sql -q "grant usage on database <% ctx.env.database %> to <% ctx.env.role %>"
Copy

In diesem Beispiel sucht der snow sql-Befehl nach den Variablendefinitionen in der Projektdefinitionsdatei und extrahiert die Werte, ohne sie in der Befehlszeile sichtbar zu machen. Die snowflake.yml-Datei sollte sich entweder im aktuellen Verzeichnis oder an dem mit der -p-Option angegebenen Speicherort befinden.

Weitere Informationen zum Speichern dieser Werte in der Projektdefinitionsdatei finden Sie unter Variablen in SQL verwenden.