PUT¶
Lädt eine oder mehrere Datendateien von einem lokalen Dateisystem auf einen internen Stagingbereich hoch.
Nachdem Sie Dateien in einen internen Stagingbereich hochgeladen haben, können Sie die Daten aus den Dateien mit dem Befehl COPY INTO <Tabelle> in eine Tabelle laden.
Bemerkung
PUT unterstützt nicht das Hochladen von Dateien in einen externen Stagingbereich. Um Dateien in einen externen Stagingbereich hochzuladen, verwenden Sie die von Ihrem Clouddienst bereitgestellten Dienstprogramme.
Der ODBC-Treiber unterstützt PUT mit Snowflake-Konten, die auf den folgenden Plattformen gehostet werden:
Amazon Web Services
Google Cloud
Microsoft Azure
- Siehe auch:
GET , LIST , REMOVE , COPY FILES , CREATE STAGE , Übersicht zum Laden von Daten
Syntax¶
PUT file://<absolute_path_to_file>/<filename> internalStage
[ PARALLEL = <integer> ]
[ AUTO_COMPRESS = TRUE | FALSE ]
[ SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE ]
[ OVERWRITE = TRUE | FALSE ]
Wobei:
internalStage ::= @[<namespace>.]<int_stage_name>[/<path>] | @[<namespace>.]%<table_name>[/<path>] | @~[/<path>]
Erforderliche Parameter¶
file://absolute_path_to_file/filename
Gibt die URI für die Datendateien auf dem Clientcomputer an. Dabei gilt Folgendes:
absolute_path_to_file
ist der Pfad zum lokalen Verzeichnis mit den hochzuladenden Dateien.filename
ist der Name der hochzuladenden Datei. Sie können Platzhalter (*
,?
) verwenden, um mehrere Dateien hochzuladen. Wenn der Verzeichnispfad oder der Dateiname Sonderzeichen oder Leerzeichen enthält, schließen Sie die gesamte Datei-URI in einfache Anführungszeichen ein.Achtung
Seien Sie vorsichtig, wenn Sie mehrere Dateien mit einer PUT-Abfrage auswählen. PUT-Abfragen, die mit einer großen Anzahl von Dateien übereinstimmen, können erhebliche Auswirkungen auf Kosten und Leistung haben.
Die URI-Formatierung ist je nach Client-Betriebssystem unterschiedlich.
- Linux/macOS:
Geben Sie den absoluten Pfad zur Datei vom Wurzelverzeichnis aus an (
/
). Für eine Datei mit dem Namenmy-data.csv
verwenden Sie zum Beispielfile:///my/file/path/my-data.csv
.- Windows:
Geben Sie den absoluten Pfad vom Wurzelverzeichnis des Laufwerks an, auf dem sich die Datei oder die Dateien befinden. Für eine Datei mit dem Namen
my-data.csv
verwenden Sie zum Beispielfile://C:temp\my-data.csv
.Wenn der Dateipfad Sonderzeichen enthält, müssen Sie den gesamten Pfad in einfache Anführungszeichen setzen und das Laufwerks- und Pfadtrennzeichen von einem umgekehrten Schrägstrich in einen Schrägstrich ändern (
/
). Für eine Datei mit dem Namenmy$data.csv
verwenden Sie zum Beispiel:'file://C:/temp/my$data.csv'
.
Bemerkung
Snowflake unterstützt keine TAR-Dateien (Bandarchive).
internalStage
Gibt den internen Stagingbereich an, in den die Dateien hochgeladen werden sollen:
@[namespace.]int_stage_name[/path]
Die Dateien werden in den angegebenen internen Stagingbereich hochgeladen.
@[namespace.]%table_name[/path]
Die Dateien werden in den Stagingbereich für die angegebene Tabelle hochgeladen.
@~[/path]
Die Dateien werden in den Stagingbereich für den aktuellen Benutzer hochgeladen.
Wobei:
namespace
ist die Datenbank oder das Schema, die/das den benannten internen Stagingbereich oder die Tabelle enthält. Die Angabe ist optional, wenn in der Sitzung eine Datenbank und ein Schema verwendet werden.path
ist ein optionaler Pfad mit Unterscheidung von Groß-/Kleinschreibung für Dateien am Cloudspeicherort, wodurch der Zugriff auf bestimmte Dateien eingegrenzt wird. Pfade werden von den verschiedenen Cloudspeicherdiensten alternativ als Präfixe oder Ordner bezeichnet.
Bemerkung
Wenn der Stagingbereichsname oder der Pfad Leerzeichen oder Sonderzeichen enthält, muss er in einfache Anführungszeichen eingeschlossen werden. Verwenden Sie zum Beispiel
'@"my stage"'
für einen Stagingbereich namens"my stage"
.
Optionale Parameter¶
PARALLEL = integer
Gibt die Anzahl der Threads an, die zum Hochladen von Dateien verwendet werden sollen. Snowflake lädt die Datendateien nach Größe getrennt hoch:
Dateien, die kleiner als 64 MB (komprimiert oder unkomprimiert) sind, werden parallel als Einzeldateien bereitgestellt.
Größere Dateien werden automatisch in Blöcke aufgeteilt, gleichzeitig bereitgestellt und im Ziel-Stagingbereich wieder zusammengefügt. Ein einzelner Thread kann mehrere Blöcke hochladen.
Wenn Sie die Anzahl der Threads erhöhen, kann die Leistung beim Hochladen großer Dateien verbessert werden.
Unterstützte Werte: Jeder ganzzahlige Wert von
1
(keine Parallelität) bis99
(99 Threads zum Hochladen von Dateien verwenden).Standard:
4
Bemerkung
Für ältere Versionen von Snowflake-Treibern gilt ein Limit von 16 MB. Dazu zählen:
JDBC-Treiberversionen vor 3.12.1
ODBC-Treiberversionen vor 2.20.5
Python-Konnektorversionen vor 2.2.0
AUTO_COMPRESS = TRUE | FALSE
Gibt an, ob Snowflake während des Uploads Dateien mit gzip komprimiert:
TRUE
: Snowflake komprimiert die Dateien (wenn sie nicht bereits komprimiert sind).FALSE
: Snowflake komprimiert die Dateien nicht.
Diese Option unterstützt keine anderen Komprimierungstypen. Wenn Sie einen anderen Komprimierungstyp verwenden möchten, komprimieren Sie die Datei separat, bevor Sie den Befehl PUT ausführen. Identifizieren Sie dann den Komprimierungstyp mit der Option
SOURCE_COMPRESSION
.Stellen Sie sicher, dass in Ihrem lokalen Ordner ausreichend Speicherplatz für Snowflake vorhanden ist, um die Datendateien vor dem Staging zu komprimieren. Stellen Sie bei Bedarf die Umgebungsvariable
TEMP
,TMPDIR
oderTMP
in Ihrem Betriebssystem so ein, dass sie auf einen lokalen Ordner verweist, der zusätzlichen freien Speicherplatz enthält.Standard:
TRUE
SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
Gibt die Komprimierungsmethode für bereits komprimierte Dateien an, die im Stagingbereich bereitgestellt werden:
Unterstützte Werte
Anmerkungen
AUTO_DETECT
Der Komprimierungsalgorithmus wird automatisch erkannt, mit Ausnahme von Brotli-komprimierten Dateien, die derzeit nicht automatisch erkannt werden können. Wenn Sie Brotli-komprimierte Dateien hochladen, verwenden Sie explizit
BROTLI
stattAUTO_DETECT
.GZIP
Das Dateiformat
*.tar.gz
wird nicht unterstützt.BZ2
Das Dateiformat
*.tar.bz2
wird nicht unterstützt.BROTLI
Muss verwendet werden, wenn Sie Brotli-komprimierte Dateien hochladen.
ZSTD
Zstandard v0.8 (und höher) wird unterstützt.
DEFLATE
Deflate-komprimierte Dateien (mit zlib-Header, RFC1950).
RAW_DEFLATE
Raw Deflate-komprimierte Dateien (ohne Header, RFC1951).
NONE
Die Datendateien wurden nicht komprimiert.
Standard:
AUTO_DETECT
Bemerkung
Snowflake verwendet diese Option, um zu ermitteln, wie die Datendateien komprimiert wurden, sodass sie dekomprimiert und die Daten zum Hochladen extrahiert werden können. Diese Option wird nicht verwendet, um die Dateien zu komprimieren.
Das Laden von Dateien, die mit anderen Dienstprogrammen komprimiert wurden, wird derzeit nicht unterstützt.
OVERWRITE = TRUE | FALSE
Gibt an, ob Snowflake beim Hochladen eine vorhandene Datei mit demselben Namen überschreibt:
TRUE
: Eine vorhandene Datei mit demselben Namen wird überschrieben.FALSE
: Eine vorhandene Datei mit demselben Namen wird nicht überschrieben.Snowflake führt eine LIST-Operation im Stagingbereich im Hintergrund aus, was die Leistung der PUT-Operation beeinträchtigen kann.
Wenn der Versuch, PUT auf einer Datei auszuführen, fehlschlägt, weil im Ziel-Stagingbereich bereits eine Datei mit demselben Namen existiert, können Sie die folgenden Maßnahmen ergreifen:
Laden Sie die Daten aus der vorhandenen Datei in eine oder mehrere Tabellen, und entfernen Sie die Datei aus dem Stagingbereich. Führen Sie den PUT-Befehl erneut auf einer Datei aus, die neue oder aktualisierte Daten enthält, um sie in den Stagingbereich hochzuladen.
Benennen Sie die lokale Datei um, und führen Sie dann die PUT-Operation erneut aus.
Verwenden Sie die PUT-Anweisung mit
OVERWRITE = TRUE
. Tun Sie dies nur, wenn es sicher ist, die vorhandene (Staging)-Datei mit demselben Namen zu überschreiben.
Wenn Ihr Snowflake-Konto auf Google Cloud gehostet wird, werden PUT-Anweisungen nicht erkannt, wenn der Parameter OVERWRITE auf TRUE gesetzt ist. Eine PUT-Operation überschreibt immer alle vorhandenen Dateien im Ziel-Stagingbereich mit den lokalen Dateien, die Sie hochladen.
Die folgenden Clients unterstützen die Option OVERWRITE für Snowflake-Konten, die auf Amazon Web Services oder Microsoft Azure gehostet werden:
SnowSQL
Snowflake-ODBC-Treiber:
Snowflake-JDBC-Treiber:
Snowflake Connector für Python
Unterstützte Werte: TRUE, FALSE.
Standard:
FALSE
.
Nutzungshinweise¶
Der Befehl kann nicht über die Seite Worksheets
der Snowflake-Weboberfläche ausgeführt werden. Verwenden Sie stattdessen den SnowSQL-Client oder Treiber, um Datendateien hochzuladen, oder informieren Sie sich in der Dokumentation des jeweiligen Snowflake-Clients über die Verwendung dieses Befehls.
Alternativ können Sie auch die Snowsight-UI verwenden, um Dateien in einen benannten internen Stagingbereich hochzuladen.
Datei-Globbing-Muster werden wie Platzhalter unterstützt, es sei denn, die Dateien, die dem Muster entsprechen, haben abweichende Verzeichnispfade. Der Befehl unterstützt nicht das Hochladen mehrerer Dateien mit abweichenden Verzeichnispfaden, da Snowflake die Verzeichnisstruktur des Dateisystems beim Hochladen von Dateien in den Stagingbereich nicht beibehält.
Die folgende PUT-Anweisung gibt zum Beispiel einen Fehler zurück, da Sie nicht mehrere Dateien in verschachtelten Unterverzeichnissen angeben können.
PUT file:///tmp/data/** @my_int_stage AUTO_COMPRESS=FALSE;
Mit diesem Befehl können Dateien nicht erstellt oder umbenannt werden.
Alle Dateien, die in internen Stagingbereichen zum Laden/Entladen von Daten gespeichert werden, werden serverseitig automatisch mit starker AES-256-Verschlüsselung verschlüsselt. Snowflake bietet standardmäßig eine zusätzliche clientseitige Verschlüsselung mit einem 128-Bit-Schlüssel (mit der Option, einen 256-Bit-Schlüssel zu konfigurieren). Weitere Informationen dazu finden Sie unter Verschlüsselungstypen für interne Stagingbereiche.
Der Befehl ignoriert alle doppelten Dateien, die Sie in denselben Stagingbereich hochladen möchten. Eine doppelte Datei ist eine nicht geänderte Datei, die den gleichen Namen wie eine bereits vorhandene Stagingdatei hat.
Um eine bereits vorhandene Stagingdatei zu überschreiben, müssen Sie die hochgeladene Datei so ändern, dass sie sich von der Stagingdatei unterscheidet. Dies führt zu einer neuen Prüfsumme für die neue bereitgestellte Stagingdatei.
Bei den Befehlen PUT und GET bedeutet ein EXECUTION_STATUS von
success
in der QUERY_HISTORY nicht, dass Datendateien erfolgreich hoch- oder heruntergeladen wurden. Stattdessen zeigt der Status an, dass Snowflake die Autorisierung erhalten hat, mit dem Datentransfer fortzufahren.
Tipp
Aus Sicherheitsgründen verliert der Befehl nach einer festgelegten Zeit seine Gültigkeit. Dies kann vorkommen, wenn Sie große, unkomprimierte Datendateien hochladen. Wir empfehlen, große Datendateien vor dem Hochladen mit einem der unterstützten Komprimierungstypen zu komprimieren, um Timeout-Probleme zu vermeiden. Geben Sie dann den Komprimierungstyp für die Dateien mit der Option SOURCE_COMPRESSION
an.
Sie können auch den Wert der Option PARALLEL
erhöhen. Dies kann die Leistung beim Hochladen großer Datendateien verbessern.
Um die parallelen Operationen beim Laden von Daten in Tabellen zu nutzen (mit dem Befehl COPY INTO <Tabelle>), empfehlen wir außerdem die Verwendung von komprimierten Datendateien mit einer Größe von etwa 100 bis 250 MB. Wenn Ihre Datendateien größer sind, sollten Sie ein Drittanbietertool in Betracht ziehen, um sie in kleinere Dateien aufzuteilen, bevor Sie sie komprimieren und hochladen.
Beispiele¶
Linux und macOS¶
Datei in einen internen Stagingbereich laden
Laden Sie eine Datei namens mydata.csv
im Verzeichnis /tmp/data
in einen internen Stagingbereich namens my_int_stage
:
PUT file:///tmp/data/mydata.csv @my_int_stage;
Datei in einen Stagingbereich einer Tabelle laden
Laden Sie eine Datei mit dem Namen orders_001.csv
im Verzeichnis /tmp/data
in den Stagingbereich für die Tabelle orderstiny_ext
, wobei die automatische Datenkomprimierung deaktiviert ist:
PUT file:///tmp/data/orders_001.csv @%orderstiny_ext
AUTO_COMPRESS = FALSE;
Mehrere Dateien in einen internen Stagingbereich laden
Verwenden Sie Platzhalterzeichen im Dateinamen, um mehrere Dateien hochzuladen:
PUT file:///tmp/data/orders_*01.csv @my_int_stage
AUTO_COMPRESS = FALSE;
Dateipfad mit Sonderzeichen angeben
Schließen Sie einen Dateipfad mit Sonderzeichen oder Leerzeichen in einfache Anführungszeichen ein:
PUT 'file:///tmp/data/orders 001.csv' @my_int_stage
AUTO_COMPRESS = FALSE;
Windows¶
Datei in den Stagingbereich des aktuellen Benutzers laden
Laden Sie eine Datei mit dem Namen mydata.csv
im Verzeichnis C:\temp\data
in den Stagingbereich für den aktuellen Benutzer, wobei die automatische Datenkomprimierung aktiviert ist:
PUT file://C:\temp\data\mydata.csv @~
AUTO_COMPRESS = TRUE;
Dateipfad mit Sonderzeichen angeben
Um einen Windows-Dateipfad mit Sonderzeichen anzugeben, müssen Sie den Pfad in einfache Anführungszeichen einschließen und umgekehrte Schrägstriche in Schrägstriche umwandeln.
In diesem Beispiel enthält der Dateiname ein Leerzeichen (my data.csv
):
PUT 'file://C:/temp/data/my data.csv' @my_int_stage
AUTO_COMPRESS = TRUE;