Entladen in Amazon S3¶
Wenn Sie bereits ein Amazon Web Services (AWS)-Konto haben und S3-Buckets zur Speicherung und Verwaltung Ihrer Datendateien verwenden, können Sie beim Entladen von Daten aus Snowflake-Tabellen Ihre vorhandenen Buckets und Ordnerpfade verwenden. Unter diesem Thema wird beschrieben, wie Sie mit dem Befehl COPY Daten aus einer Tabelle in einen Amazon S3-Bucket entladen. Sie können die entladenen Datendateien dann in Ihr lokales Dateisystem herunterladen.
Wie in der folgenden Abbildung dargestellt, erfolgt das Entladen von Daten in einen S3-Bucket in zwei Schritten:
- Schritt 1::
Verwenden Sie den Befehl COPY INTO <Speicherort>, um die Daten aus der Snowflake-Datenbanktabelle in eine oder mehrere Dateien eines S3-Buckets zu kopieren. Geben Sie im Befehl ein benanntes externes Stagingobjekt an, das auf den S3-Bucket verweist (empfohlen), oder wählen Sie aus, dass die Daten direkt in den Bucket entladen werden, indem Sie die URI und entweder die Speicherintegration oder die Sicherheitsanmeldeinformationen (falls erforderlich) für den Bucket angeben.
Unabhängig davon, welche Methode Sie verwenden, erfordert dieser Schritt ein aktives, aktuelles virtuelles Warehouse für die Sitzung, wenn Sie den Befehl manuell oder aus einem Skript heraus ausführen. Das Warehouse stellt die Computeressourcen zur Verfügung, um Zeilen aus der Tabelle zu schreiben.
- Schritt 2::
Verwenden Sie die von Amazon bereitgestellten Schnittstellen/Tools, um die Dateien aus dem S3-Bucket herunterzuladen.
Tipp
Die unter diesem Thema bereitgestellten Anleitungen gehen davon aus, dass Sie Vorbereiten des Entladens von Daten gelesen und ggf. ein benanntes Dateiformat erstellt haben.
Bevor Sie beginnen, sollten Sie vielleicht auch Hinweise zum Entladen von Daten für bewährte Verfahren, Tipps und andere Hinweise lesen.
Unter diesem Thema:
Zulassen von Amazon Virtual Private Cloud-IDs¶
Wenn ein AWS-Administrator Ihrer Organisation Snowflake nicht explizit Zugriff auf Ihr AWS S3-Speicherkonto gewährt hat, können Sie dies jetzt tun. Führen Sie die Schritte aus, die in der Anleitung zur Konfiguration des Datenladens unter Zulassen von Virtual Private Cloud-IDs beschrieben sind.
Konfigurieren eines S3-Buckets für das Entladen von Daten¶
In Snowflake sind folgende Berechtigungen für einen S3-Bucket und S3-Ordner erforderlich, um neue Dateien im Ordner (und allen Unterordnern) zu erstellen:
s3:DeleteObject
s3:PutObject
Als bewährte Methode empfiehlt Snowflake, ein Speicherintegrationsobjekt zu konfigurieren, um die Authentifizierungsverantwortung für externen Cloudspeicher an eine Snowflake-Entität für Identitäts- und Zugriffsverwaltung (IAM) zu delegieren.
Weitere Informationen zur Konfiguration finden Sie unter Konfigurieren des sicheren Zugriffs auf Amazon S3.
Konfigurieren der Unterstützung von Amazon S3-Zugriffssteuerungslisten – Optional¶
Snowflake-Speicherintegrationen unterstützen AWS-Zugriffssteuerungslisten (ACLs), um dem Bucket-Eigentümer volle Kontrolle zu gewähren. Dateien, die in Amazon S3-Buckets aus entladenen Tabellendaten erstellt werden, sind Eigentum einer AWS-Rolle für Identitäts- und Zugriffsmanagement (IAM). ACLs unterstützen den Anwendungsfall, bei dem IAM-Rollen in einem AWS-Konto für den Zugriff auf S3-Buckets in einem oder mehreren anderen AWS-Konten konfiguriert sind. Ohne ACL-Unterstützung konnten Benutzer in Konten von Bucket-Eigentümern nicht auf die Datendateien zugreifen, die mithilfe einer Speicherintegration in einen externen (S3) Stagingbereich entladen wurden. Wenn Benutzer Snowflake-Tabellendaten in Datendateien in einem externen (S3) Stagingbereich mit COPY INTO <Speicherort> entladen, wendet die Entladeoperation eine ACL auf die entladenen Datendateien an. Die Datendateien wenden die Berechtigung "s3:x-amz-acl":"bucket-owner-full-control"
auf die Dateien an und gewähren dem Besitzer des S3-Buckets volle Kontrolle über sie.
Aktivieren Sie die ACL-Unterstützung in der Speicherintegration für einen S3-Stagingbereich über den optionalen Parameter STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control'
. Eine Speicherintegration ist ein Snowflake-Objekt, in dem ein für Ihren S3-Cloudspeicher generierter IAM-Benutzer (Identitäts- und Zugriffsverwaltung) zusammen mit einem optionalen Satz zulässiger oder blockierter Speicherorte (d. h. S3-Buckets) gespeichert wird. Ein AWS-Administrator Ihrer Organisation fügt den generierten IAM-Benutzer zu der Rolle hinzu, um Snowflake Berechtigungen für den Zugriff auf bestimmte S3-Buckets zu erteilen. Dank dieser Funktion müssen Benutzer beim Erstellen von Stagingbereichen oder beim Laden von Daten keine Anmeldeinformationen eingeben. Ein Administrator kann den Wert für den Parameter STORAGE_AWS_OBJECT_ACL
beim Erstellen einer Speicherintegration (mit CREATE STORAGE INTEGRATION) oder später (mit ALTER STORAGE INTEGRATION) festlegen.
Entladen von Daten in einen externen Stagingbereich¶
Externe Stagingbereiche sind benannte Datenbankobjekte, die ein Höchstmaß an Flexibilität beim Entladen von Daten bieten. Da es sich um Datenbankobjekte handelt, können Berechtigungen für benannte Stagingbereiche jeder Rolle zugewiesen werden.
Sie können einen externen benannten Stagingbereich entweder über die Weboberfläche oder mit SQL erstellen:
- Classic Console:
- SQL:
Erstellen eines benannten Stagingbereichs¶
Im folgenden Beispiel wird ein externer Stagingbereich namens my_ext_unload_stage
mithilfe eines S3-Buckets namens unload
mit einem Ordnerpfad namens files
erstellt. Der Stagingbereich greift über eine vorhandene Speicherintegration mit dem Namen s3_int
auf den S3-Bucket zu.
Der Stagingbereich verweist auf das benannte Dateiformatobjekt namens my_csv_unload_format
, das in Vorbereiten des Entladens von Daten erstellt wurde:
CREATE OR REPLACE STAGE my_ext_unload_stage URL='s3://unload/files/'
STORAGE_INTEGRATION = s3_int
FILE_FORMAT = my_csv_unload_format;
Entladen von Daten in den benannten Stagingbereich¶
Verwenden Sie den Befehl COPY INTO <Speicherort>, um Daten aus einer Tabelle über einen externen Stagingbereich in einen S3-Bucket zu entladen.
Im folgenden Beispiel wird der Stagingbereich
my_ext_unload_stage
verwendet, um alle Zeilen der Tabellemytable
in eine oder mehrere Dateien des S3-Buckets zu entladen. Alle Dateien erhalten das Dateinamen-Präfixd1
:COPY INTO @my_ext_unload_stage/d1 from mytable;
Verwenden Sie die S3-Konsole (oder eine ähnliche Clientanwendung), um die Objekte (d. h. die durch den Befehl generierten Dateien) aus dem Bucket abzurufen.
Entladen von Daten direkt in einen S3-Bucket¶
Verwenden Sie den Befehl COPY INTO <Speicherort>, um Daten aus einer Tabelle direkt in einen angegebenen S3-Bucket zu entladen. Diese Option eignet sich gut für die Ad-hoc-Entladung, wenn Sie keine regelmäßige Datenentladung mit den gleichen Tabellen- und Bucketparametern planen.
Sie müssen im Befehl COPY den URI für den S3-Bucket und die Speicherintegration oder Anmeldeinformationen für den Zugriff auf den Bucket angeben.
Im folgenden Beispiel werden alle Zeilen der Tabelle
mytable
in eine oder mehrere Dateien des S3-Bucketsmybucket
mit dem Ordnerpfadpräfixunload/
entladen:COPY INTO s3://mybucket/unload/ from mytable storage_integration = s3_int;
Bemerkung
In diesem Beispiel wird mithilfe einer referenzierten Speicherintegration namens
s3_int
auf den referenzierten S3-Bucket zugegriffen.Verwenden Sie die S3-Konsole (oder eine ähnliche Clientanwendung), um die Objekte (d. h. die durch den Befehl generierten Dateien) aus dem Bucket abzurufen.