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"
Um eine Datei mit einer SQL-Abfrage auszuführen, führen Sie einen Befehl ähnlich dem folgenden aus:
snow sql -f my_query.sql
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';"
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"
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"
Dieses Beispiel generiert die folgende SQL-Abfrage:
grant usage on database dev to eng_rl
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 %>"
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.