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 ]
Copy

Wobei:

internalStage ::=
    @[<namespace>.]<int_stage_name>[/<path>]
  | @[<namespace>.]%<table_name>[/<path>]
  | @~[/<path>]
Copy

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 Namen my-data.csv verwenden Sie zum Beispiel file:///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 Beispiel file://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 Namen my$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) bis 99 (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 oder TMP 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 statt AUTO_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 Registerkarte „Arbeitsblatt“ 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;
    
    Copy
  • 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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy