Auswahl eines Stagingbereichs für lokale Dateien

Ein Stagingbereich gibt an, wo Datendateien gespeichert (d. h. „bereitgestellt“) werden, damit die Daten in den Dateien in eine Tabelle geladen werden können.

Unter diesem Thema:

Typen von Stagingbereichen

Standardmäßig wird jedem Benutzer und jeder Tabelle in Snowflake automatisch ein interner Stagingbereich für die Bereitstellung der zu ladenden Datendateien zugewiesen. Darüber hinaus können Sie benannte interne Stagingbereiche anlegen.

Dateibereitstellungsinformationen werden in beiden Schritten des Datenladeprozesses benötigt:

  1. Sie müssen im Befehl PUT einen internen Stagingbereich angeben, wenn Sie Dateien in Snowflake hochladen.

  2. Sie müssen den gleichen Stagingbereich im Befehl COPY INTO <Tabelle> angeben, wenn Sie Daten aus den bereitgestellten Dateien in eine Tabelle laden.

Wählen Sie die passende Stagingart für spezifische Datendateien. Jede Option bietet Vor- und Nachteile.

Benutzer-Stagingbereiche

Jedem Benutzer ist standardmäßig ein Snowflake-Stagingbereich zum Speichern von Dateien zugeordnet. Dieser Stagingbereich ist eine praktische Option, wenn Ihre Dateien nur von einem einzigen Benutzer verwendet werden sollen, aber in mehrere Tabellen kopiert werden müssen.

Benutzer-Stagingbereiche haben die folgenden Eigenschaften und Einschränkungen:

  • Benutzer-Stagingbereiche werden mit @~ referenziert. Verwenden Sie beispielsweise LIST @~, um die Dateien eines Benutzer-Stagingbereichs aufzulisten.

  • Im Gegensatz zu benannten Stagingbereichen können Benutzer-Stagingbereiche nicht geändert oder gelöscht werden.

  • Benutzer-Stagingbereiche bieten keine Unterstützung für das Einstellen von Dateiformatoptionen. Stattdessen müssen Sie das Dateiformat und die Kopieroptionen als Teil des Befehls COPY INTO <Tabelle> angeben.

Diese Option ist in folgenden Fällen nicht sinnvoll:

  • Mehrere Benutzer benötigen Zugriff auf die Dateien.

  • Der aktuelle Benutzer hat keine INSERT-Berechtigungen für die Tabellen, in die die Daten geladen werden.

Tabellen-Stagingbereiche

Jeder Tabelle ist standardmäßig eine Snowflake-Stagingbereich zum Speichern von Dateien zugeordnet. Dieser Stagingbereich ist eine praktische Option, wenn Ihre Dateien für mehrere Benutzer zugänglich sein sollen und nur in eine einzige Tabelle kopiert werden sollen.

Tabellen-Stagingbereiche haben folgende Eigenschaften und Einschränkungen:

  • Tabellen-Stagingbereiche haben den gleichen Namen wie die Tabelle, z. B. hat eine Tabelle mit dem Namen mytable einen Stagingbereich, auf den mit @%mytable referenziert wird.

  • Im Gegensatz zu benannten Stagingbereichen können Tabellen-Stagingbereiche nicht geändert oder gelöscht werden.

  • Tabellen-Stagingbereiche bieten keine Unterstützung für das Einstellen von Dateiformatoptionen. Stattdessen müssen Sie das Dateiformat und die Kopieroptionen als Teil des Befehls COPY INTO <Tabelle> angeben.

  • Tabellen-Stagingbereiche bieten keine Unterstützung für das Umwandeln von Daten beim Laden (d. h. Verwenden einer Abfrage als Quelle für den COPY-Befehl).

Beachten Sie, dass ein Tabellen-Stagingbereich kein separates Datenbankobjekt ist, sondern ein impliziter Stagingbereich, der an die Tabelle selbst gebunden ist. Ein Tabellen-Stagingbereich hat keine eigenen zuweisbaren Berechtigungen. Um Dateien in einem Tabellen-Stagingbereiche bereitzustellen oder im Stagingbereich abzufragen oder zu löschen, müssen Sie der Tabellenbesitzer sein (die Rolle mit der Berechtigung OWNERSHIP für die Tabelle haben).

Diese Option ist nicht sinnvoll, wenn Sie die Daten in den Dateien in mehrere Tabellen kopieren müssen.

Interne benannte Stagingbereiche

Interne Stagingbereiche sind benannte Datenbankobjekte, die ein Höchstmaß an Flexibilität beim Laden von Daten bieten. Da es sich um Datenbankobjekte handelt, gelten die Sicherheits-/Zugriffsregeln, die für alle Objekte gelten:

  • Benutzer mit den entsprechenden Berechtigungen für den Stagingbereich können Daten in eine beliebige Tabelle laden.

  • Das Eigentum an dem Stagingbereich kann auf eine andere Rolle übertragen werden, und die für die Nutzung des Stagingbereichs erteilten Berechtigungen können geändert werden, um Rollen hinzuzufügen oder zu entfernen.

  • Wenn Sie einen Stagingbereich erstellen, müssen Sie einer oder mehreren Rollen explizit Berechtigungen für den Stagingbereich erteilen, bevor Benutzer mit diesen Rollen den Stagingbereich nutzen können.

Wenn Sie planen, Datendateien bereitzustellen, die nur von Ihnen selbst oder nur in eine einzelne Tabelle geladen werden, dann können Sie auch einfach entweder Ihren Benutzer-Stagingbereich oder den Stagingbereich der Tabelle verwenden, in die Sie Daten laden werden.

Benannte interne Stagingbereiche sind optional, werden aber empfohlen, wenn Sie regelmäßige Datenladungen planen, die mehrere Benutzer und/oder Tabellen betreffen können. Anweisungen zum Erstellen eines benannten Stagingbereichs finden Sie unter Erstellen eines Stagingbereichs weiter unten.

Erstellen eines Stagingbereichs

Sie können einen benannten internen Stagingbereich entweder über die Weboberfläche oder mit SQL erstellen:

Weboberfläche

Klicken Sie auf Databases Databases tab » <DB-Name> » Stages

SQL

CREATE STAGE

Erstellen eines benannten Stagingbereichs

Im folgenden Beispiel wird ein interner Stagingbereich erstellt, der auf das benannte Dateiformatobjekt namens my_csv_format verweist, das in Vorbereiten des Ladens von Daten erstellt wurde:

CREATE OR REPLACE STAGE my_stage
  FILE_FORMAT = my_csv_format;

Bemerkung

Durch die Angabe eines benannten Dateiformatobjekts (oder einzelner Dateiformatoptionen) für den Stagingbereich ist es nicht erforderlich, später die gleichen Dateiformatoptionen im COPY-Befehl anzugeben, der zum Laden von Daten aus dem Stagingbereich verwendet wird.

Im folgenden Beispiel wird ein interner Stagingbereich erstellt, der Ad-hoc-Dateiformatoptionen festlegt, anstatt auf ein benanntes Dateiformat zu verweisen. Datendateien in diesem Stagingbereich haben ein CSV-Format und ein Pipe-Feldtrennzeichen (|). Wenn auf diesen Stagingbereich Bezug genommen wird, überspringt der COPY-Befehl die erste Zeile in den Datendateien:

CREATE OR REPLACE STAGE my_stage
  file_format = (type = 'CSV' FIELD_DELIMITER = '|' SKIP_HEADER = 1);

Nächstes Thema: Staging von Datendateien aus einem lokalen Dateisystem