Ausführen von SQL-Anweisungen¶
Mit dem snow sql-Befehl können Sie Ad-hoc-SQL-Abfragen oder Dateien, die enthalten SQL-Abfragen enthalten, ausführen, indem Sie die folgenden Optionen verwenden:
Um eine Ad-hoc-Abfrage auszuführen, verwenden Sie die Befehlszeilenoption
-q. Im folgenden Beispiel wird beispielsweise eine einfache SQL SELECT-Abfrage ausgeführt:Um eine Datei auszuführen, die eine SQL-Abfrage enthält, verwenden Sie die Befehlszeilenoption
-f, um den Pfad zur Datei anzugeben. Im folgenden Beispiel wird beispielsweise eine Datei ausgeführt, die eine SQL-Abfrage enthält:
Der snow sql-Befehl kann auch mehrere Anweisungen ausführen. In diesem Fall werden mehrere Resultsets zurückgegeben. Wenn Sie beispielsweise Folgendes ausführen:
Dann führt dies zu folgender Ausgabe:
Sie können auch Skriptblöcke in Snowflake CLI ausführen, mit einer Einschränkung bezüglich des Begrenzungszeichens $$.
Beispiel:
Einige Betriebssysteme interpretieren $$, wie z. B. eine Prozess-ID (PID), anstatt es als Begrenzungszeichen für einen Skriptblock zu erkennen. Um diese Beschränkung zu umgehen, können Sie die folgenden Alternativen verwenden:
Wenn Sie den Skriptblock dennoch in der Befehlszeile angeben möchten, können Sie die
$$-Begrenzungszeichen maskieren, wie in\$\$.Sie können den Skriptblock auch mit den standardmäßigen
$$-Begrenzungszeichen in eine separate Datei schreiben und mit dem Befehlsnow sql -f <filename>aufrufen.
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_nameund<% 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:
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:
Dieses Beispiel generiert die folgende SQL-Abfrage:
Mit der Option --enable-templating können Sie festlegen, welche Vorlagensyntax in einer SQL-Abfrage aufgelöst wird. Snowflake CLI unterstützt folgende Syntaxen:
STANDARD: Unterstützt die Standard-Variablensyntax von Snowflake CLI (<% variable_name %>). Standardmäßig aktiviert.LEGACY: Unterstützt die Variablensyntax von SnowSQL (&{ variable_name }oder&variable_name). Standardmäßig aktiviert.JINJA: Unterstützt die jinja-Variablensyntax ({{ variable_name }}). Standardmäßig deaktiviert.ALL: Alle unterstützten Syntaxen sind zulässig. Standardmäßig deaktiviert.NONE: Vorlagen werden nicht unterstützt. Standardmäßig deaktiviert.
Die folgenden Beispiele veranschaulichen verschiedene Möglichkeiten zur Unterstützung von Vorlagen:
Deaktivieren Sie Vorlagen, sodass keine der Abfragevariablen aufgelöst wird:
JINJA- und STANDARD-Vorlagen zulassen, nicht aber LEGACY-Vorlagen:
Aktivieren aller Syntaxvarianten, sodass die SQL Abfrage alle drei Syntaxen auflöst:
Bemerkung
JINJA-Variablen werden, falls aktiviert, nach STANDARD- und LEGACY-Variablen aufgelöst.
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:
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.
Asynchrones Ausführen von SQL-Abfragen¶
Snowflake CLI bietet die Möglichkeit, eine oder mehrere SQL-Abfragen asynchron auszuführen. Anstatt auf ein Ergebnis zu warten, plant der Befehl snow sql die Abfragen in Snowflake und gibt eine Abfrage-ID zurück. Nachdem eine Abfrage beendet wurde, können Sie das Ergebnis mit dem Abfragebefehl !result oder dem SQL-Befehl RESULT_SCAN abrufen.
Um eine SQL-Abfrage asynchron auszuführen, beenden Sie die Abfrage mit ;> anstelle von ;, wie gezeigt:
Im folgenden Beispiel wird eine einzelne Abfrage asynchron ausgeführt:
Sie können dann die zurückgegebene Abfrage-ID in dem Abfragebefehl !result verwenden, um das Abfrageergebnis anzuzeigen:
Sie können auch mehrere Abfragen in der Abfragezeichenfolge ausführen, sowohl asynchron als auch synchron, wie gezeigt:
Arbeiten mit SQL-Abfragebefehlen¶
Snowflake CLI stellt die folgenden Befehle zur Verfügung, die Sie innerhalb Ihrer SQL-Abfragen verwenden können:
!source, der SQL in lokalen Dateien oder URLs ausführt.
!queries, der alle SQL-Abfragen auflistet.
!result, der das Ergebnis einer SQL-Abfrage anzeigt.
!abort, der eine aktive SQL-Abfrage abbricht.
!edit, der einen externen Editor zum Ändern und Ausführen von SQL-Befehlen öffnet.
Tipp
Wenn Sie Ihre SQL-Abfrage in doppelte Anführungszeichen ("") statt in einfache Anführungszeichen ('') einschließen, müssen Sie das Ausrufezeichen möglicherweise maskieren (!), je nachdem, welche Shell Sie verwenden.
Führen Sie SQL in lokalen Dateien oder URLs aus¶
Sie können den Abfragebefehl !source in Ihrer SQL-Abfrage verwenden, um SQL in lokalen Dateien oder einer URL-basierten Datei auszuführen. Der folgende Befehl führt zum Beispiel alle SQL-Befehle in einer lokalen Datei namens my_sql_code.sql aus:
Sie können auch !source-Befehle in den SQL-Dateien verschachteln, wie z. B.:
In diesem Beispiel führt der Befehl die SELECT-Abfrage aus und führt dann die SQL-Befehle in der Datei code_file_2.sql aus. Bevor Sie die !source-Abfragen ausführen, führt Snowflake CLI Folgendes aus:
Evaluiert Variablenersetzungen und Vorlagen.
Liest den Inhalt aller verschachtelten Dateien, um sicherzustellen, dass keine Rekursion stattfindet.
Wenn die Variablen und Vorlagen aufgelöst werden und keine Rekursion festgestellt wird, sendet der Befehl den Code zur Ausführung an Snowflake.
Bemerkung
Wenn Sie doppelte Anführungszeichen ("") anstelle von einfachen Anführungszeichen ('') um eine !source-Abfrage verwenden, müssen Sie je nachdem, welche Shell Sie verwenden, möglicherweise das ! maskieren (\!).
Die folgenden Beispiele veranschaulichen verschiedene Möglichkeiten, wie Sie Quelldateien ausführen können.
Ausführen von Code in einer lokalen Datei.
Dieses Beispiel geht davon aus, dass Sie eine einfache Abfrage in einer lokalen SQL-Datei haben.
Um den Code in der Datei auszuführen, geben Sie den folgenden Befehl ein:
Ausführen von Code in einer URL-basierten Datei.
In diesem Beispiel wird davon ausgegangen, dass Sie die gleiche einfache Abfrage in einer SQL-Datei unter einer URL haben.
Um den Code in der Datei auszuführen, geben Sie den folgenden Befehl ein:
Ausführen von Code, der Variablensubstitution und Templating verwendet.
Dieses Beispiel geht davon aus, dass Sie eine Abfrage in einer lokalen SQL-Datei haben, die eine Vorlagenvariable verwendet.
Um den Code in der Datei auszuführen, geben Sie den folgenden Befehl ein, der den Variablenwert definiert:
Bemerkung
Der Befehl !source unterstützt den alten Alias !load.
Alle SQL-Abfragen auflisten¶
Der !queries-Abfragebefehl listet alle Abfragen für ein Konto auf. Standardmäßig listet der Befehl die 25 letzten Abfragen auf, die in der aktuellen Sitzung ausgeführt wurden.
Der folgende !queries-Abfragebefehl gibt zum Beispiel die drei letzten Abfragen für einen bestimmten Benutzer zurück:
Sie können die folgenden Filter verwenden, um die Liste der zurückgegebenen Abfragen einzuschränken:
Filter |
Standard |
Beschreibung |
|---|---|---|
amount (integer) |
25 |
Anzahl der letzten Abfragen, die zurückgegeben werden sollen (Standard: 25). |
session (boolean) |
N/A |
Falls angegeben, werden nur Abfragen zurückgegeben, die in der aktuellen Sitzung ausgeführt wurden. |
warehouse (string) |
Keine |
Gibt Abfragen zurück, die nur für das angegebene Warehouse ausgeführt wurden. |
user (string) |
Keine |
Gibt Abfragen zurück, die nur von dem angegebenen Benutzer ausgeführt wurden. |
duration (Millisekunden) |
0 |
Gibt nur Abfragen zurück, die mindestens die angegebene Anzahl von Millisekunden benötigt haben. |
start_date (string) |
Keine |
Gibt nur Abfragen zurück, die nach dem angegebenen Datum ausgeführt wurden. Es wird erwartet, dass das Datum im ISO-Format angegeben wird (zum Beispiel |
end_date (string) |
Keine |
Gibt nur Abfragen zurück, die vor dem angegebenen Datum ausgeführt wurden. Es wird erwartet, dass das Datum im ISO-Format angegeben wird (zum Beispiel |
start (integer) |
Keine |
Gibt nur Abfragen zurück, die nach dem angegebenen Unix-Zeitstempel (in Millisekunden) ausgeführt wurden. |
end (integer) |
Keine |
Gibt nur Abfragen zurück, die vor dem angegebenen Unix-Zeitstempel (in Millisekunden) ausgeführt wurden. |
status (enum) |
Keine |
Gibt nur Abfragen mit einem der folgenden Status zurück:
|
type |
Keine |
Gibt nur Abfragen von einem der folgenden Typen zurück:
|
Die folgenden Beispiele liefern Abfragen mit verschiedenen Filtern:
Gibt die 25 letzten Abfragen zurück, die in der aktuellen Sitzung ausgeführt wurden:
Gibt die 20 letzten Abfragen zurück, die auf dem Konto ausgeführt wurden:
Liefert die 20 zuletzt auf dem Konto ausgeführten Abfragen, deren Ausführung länger als 200 Millisekunden dauerte:
Gibt die 25 letzten Abfragen zurück, die im angegebenen Warehouse ausgeführt wurden:
Gibt ein vollständiges SQL-Abfrageergebnis zurück¶
Der Abfragebefehl !result gibt das Ergebnis einer abgeschlossenen Abfrage zurück, wenn die Abfrage-ID angegeben wird. Sie können die Abfrage-ID auf folgende Weise erhalten:
Sehen Sie sich die Seite Abfrageverlauf in Snowsight an.
Führen Sie den SQL-Abfragebefehl
!queriesaus.Verwenden Sie die ID, die von einer asynchronen Abfrage zurückgegeben wird.
Abbrechen einer aktiven SQL-Abfrage¶
Der Abfragebefehl !abort bricht eine aktive Abfrage ab, wenn die Abfrage-ID angegeben wird. Sie können die Abfrage-ID auf folgende Weise erhalten:
Sehen Sie sich die Seite Abfrageverlauf in Snowsight an.
Führen Sie den SQL-Abfragebefehl
!queriesaus.Verwenden Sie die ID, die von einer asynchronen Abfrage zurückgegeben wird.
Öffnen Sie einen externen Editor, um SQL-Befehle zu ändern und auszuführen.¶
Der Befehl !edit öffnet einen externen Editor, in dem Sie SQL-Befehle ändern können, die ausgeführt werden sollen, wenn Sie den Editor verlassen. Der Editor wird in der Umgebungsvariable EDITOR angegeben. Wenn die Umgebungsvariable nicht gesetzt ist, wird der Standard -Systemeditor verwendet.
Um Befehle in einen externen Editor einzugeben, gehen Sie wie folgt vor:
Wenn noch nicht in Ihrer Shell definiert, legen Sie die
EDITOR-Umgebungsvariable auf Ihren bevorzugten Texteditor fest.Geben Sie den Befehl
snow sqlein:Geben Sie an der Aufforderung
>den Befehl!editein:Der Befehl öffnet den angegebenen Texteditor.
Geben Sie Ihre SQL-Befehle im Editor ein, wie nachfolgend gezeigt:
Speichern Sie die Datei, und beenden Sie den Editor.
Die von Ihnen eingegebenen Befehle werden wie folgt angezeigt:
Um die Befehle auszuführen, wählen Sie
ENTER.Die Ausgabe des Befehls wird wie folgt angezeigt:
Eingeben mehrerer Befehle in einer einzigen Transaktion¶
Mit der Option --single-transaction können Sie mehrere SQL-Befehle eingeben, die als Alles-oder-Nichts-Satz von Befehlen ausgeführt werden. Indem Sie Befehle in einer einzigen Transaktion ausführen, können Sie sicherstellen, dass alle Befehle erfolgreich abgeschlossen werden, bevor Sie die Änderungen festschreiben. Wenn einer der Befehle fehlschlägt, bleibt keine der Änderungen aus den erfolgreichen Befehlen erhalten.
Die folgenden Beispiele zeigen erfolgreiche und erfolglose Transaktionen:
Erfolgreiche Befehlsausführung
Sie können dann überprüfen, ob die Befehle in die Datenbank übertragen wurden:
Erfolglose Einzeltransaktion
Sie können dann überprüfen, dass die Befehle nicht in die Datenbank übertragen wurden:
Eingabe von SQL-Befehlen im interaktiven Modus¶
Der Befehl snow sql unterstützt einen interaktiven Modus, in dem Sie SQL-Befehle einzeln eingeben können. Der interaktive Modus bietet die folgenden Features:
Syntax-Hervorhebung
Code-Vervollständigung beim Tippen
Durchsuchbarer Verlauf
Durch Drücken von CTRL-R: können Sie Ihren Befehlsverlauf durchsuchen:
Mehrzeilige Eingabe
Wenn Sie ENTER in einer Zeile drücken, die nicht mit einem Semikolon endet (
;), springt der Cursor für weitere Befehle in die nächste Zeile, bis eine Anweisung mit einem Semikolon endet.
Um den interaktiven Modus zu verwenden, geben Sie den Befehl snow sql ein, gefolgt von ENTER, wie gezeigt:
Der Befehl öffnet eine Sub-Shell mit einer >-Eingabeaufforderung, an der Sie interaktiv SQL-Befehle eingeben können:
Sie können dann SQL-Befehle eingeben, wie gezeigt:
Bemerkung
Sie müssen jede SQL-Anweisung mit einem Semikolon beenden (;).
Um den interaktiven Modus zu verlassen, geben Sie exit, quit, oder CTRL-D ein.