Auswahl eines internen 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 interner Stagingbereiche

Snowflake unterstützt die folgenden Typen von internen Stagingbereichen:

  • Benutzer

  • Tabelle

  • Benannt

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 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.

Benannte Stagingbereiche

Benannte Stagingbereiche sind benannte Datenbankobjekte, die ein Höchstmaß an Flexibilität beim Entladen von Daten bieten.

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

  • Da der Stagingbereich ein Datenbankobjekte ist, gelten die Sicherheits-/Zugriffsregeln, die für alle Objekte gelten: Die Berechtigungen zum Verwenden eines Stagingbereichs kann über Rollen erteilt oder entzogen werden. Darüber hinaus kann die Eigentümerschaft an einem Stagingbereich auf eine andere Rolle übertragen werden.

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 Stagingbereiche sind optional, werden aber empfohlen, wenn Sie regelmäßige Datenladeoperationen planen, die mehrere Benutzer und/oder Tabellen betreffen können. Anweisungen zum Erstellen eines benannten Stagingbereichs finden Sie unter Erstellen eines benannten Stagingbereichs.

Erstellen eines benannten Stagingbereichs

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

Bemerkung

Sie müssen eine Rolle verwenden, der die USAGE-Berechtigung für die Datenbank und das Schema, in denen der Stagingbereich gespeichert ist, sowie die CREATE STAGE-Berechtigung für das Schema erteilt wurden oder die diese Berechtigungen geerbt hat.

Weitere Informationen zu CREATE STAGE finden Sie unter Anforderungen an die Zugriffssteuerung.

Benannten Stagingbereich mit SQL erstellen

Verwenden Sie den Befehl CREATE STAGE, um einen benannten Stagingbereich mit SQL zu erstellen.

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

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

Benannten Stagingbereich mit Snowsight erstellen

Um mit Snowsight einen benannten internen Stagingbereich zu erstellen, gehen Sie wie folgt vor:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie Data » Databases aus.

  3. Wählen Sie die Datenbank und das Schema aus, in denen Sie einen Stagingbereich erstellen möchten.

  4. Wählen Sie Create » Stage » Snowflake Managed aus.

  5. Geben Sie einen Stage Name ein.

  6. Optional können Sie Directory table deaktivieren. Verzeichnistabellen ermöglichen das Anzeigen von Dateien im Stagingbereich, erfordern jedoch ein Warehouse und sind daher mit Kosten verbunden. Sie können diese Option vorerst deaktivieren und eine Verzeichnistabelle später aktivieren.

  7. Wählen Sie unter Encryption den Typ der Verschlüsselung aus, der für alle in Ihrem Stagingbereich gespeicherten Dateien unterstützt wird. Weitere Informationen dazu finden Sie unter Verschlüsselung für interne Stagingbereiche. Sie können den Verschlüsselungstyp nicht mehr ändern, nachdem Sie den Stagingbereich erstellt haben.

    Bemerkung

    Um den Datenzugriff zu ermöglichen, empfehlen wir die Verwendung der serverseitigen Verschlüsselung. Andernfalls werden Stagingdateien standardmäßig clientseitig verschlüsselt und sind beim Herunterladen nicht lesbar. Weitere Informationen dazu finden Sie unter Serverseitige Verschlüsselung für Zugriff auf unstrukturierte Daten.

  8. Füllen Sie die Felder zur Beschreibung Ihres Stagingbereichs aus. Weitere Informationen dazu finden Sie unter CREATE STAGE.

  9. Wählen Sie Create aus.

Benannten Stagingbereich mit der klassischen Konsole erstellen

Wählen Sie Databases Databases tab » <DB-Name> » Stages aus.

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