Verwenden von Amazon S3-kompatiblem Speicher

Die Amazon Simple Storage Service (S3)-REST-API ermöglicht den programmgesteuerten Zugriff auf Speicher-Buckets und Objekte, um CRUD-Operationen und verschiedene administrative Aktionen auszuführen. Eine wachsende Zahl von Speicheranwendungen und Speichergeräten verfügt über eigene S3-kompatible APIs. Snowflake-Features, die auf S3-Speicher zugreifen und mit diesen interagieren, können mit einigen Einschränkungen ebenfalls S3-kompatiblem Speicher nutzen.

Für den Zugriff auf Speicher außerhalb der öffentlichen Cloud (d. h. lokal bzw. „on-premises“ oder an der Edge) können Sie in Snowflake externe Stagingbereiche erstellen, die den S3-komptiblen API-Endpunkt, den Bucket-Namen und -Pfad sowie die Anmeldeinformationen speichern. Erteilen Sie Rollen Berechtigungen für diese Stagingbereiche, damit die Benutzer Daten von den Speicherorten laden und in diese entladen können.

Erstellen Sie externe Tabellen in den externen Stagingbereichen, sodass Sie Ihren Data Lake um diesen Speicher erweitern können.

Unter diesem Thema:

Unterstützung von Cloudplattformen

Dieses Feature ist für Snowflake-Konten verfügbar, die auf einer der unterstützten Cloudplattformen gehostet werden:

  • Amazon Web Services

  • Google Cloud

  • Microsoft Azure

Anforderungen an S3-kompatiblen Speicher

Ein S3-kompatibler API-Endpunkt muss folgende Anforderungen erfüllen:

  • Hohe Konformität mit der S3-API. Wenn sich der Endpunkt nicht wie S3 verhält, kann er nicht mit Snowflake verwendet werden.

  • Wird vom Speicheranbieter als Snowflake-S3-kompatibler, getesteter und konformer Dienst unterstützt.

  • Ermöglicht Zugriff über die öffentliche Cloud, in der Ihr Snowflake-Konto gehostet wird.

  • Hochverfügbar und leistungsfähig für Analysezwecke.

  • Zur Verwendung direkter Anmeldeinformationen konfiguriert.

  • Zur Verwendung von HTTPS-Kommunikation mit gültigem TLS-Zertifikat konfiguriert.

Erstellen von externen Stagingbereichen

Erstellen Sie benannte externe Stagingbereiche mit CREATE STAGE. Ein benanntes Stagingbereichsobjekt kann neben anderen SQL-Aktionen zum Auflisten von Dateien, zum Laden von Daten und zum Entladen von Dateien verwendet werden.

Sie können zu jedem von Ihnen erstellten externen Stagingbereich eine Verzeichnistabelle hinzufügen. Fragen Sie eine Verzeichnistabelle ab, um Datei-URLs abzurufen und auf Dateien im referenzierten Speicher sowie auf andere Metadaten zuzugreifen.

Syntax

CREATE [ OR REPLACE ] STAGE <external_stage_name>
  URL = 's3compat://{bucket}[/{path}/]'
  ENDPOINT = '<s3_api_compatible_endpoint>'
  CREDENTIALS = ( AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' )
  ..
Copy

Parameter

In diesem Abschnitt werden die Parameter beschrieben, die für externe Stagingbereiche spezifisch sind, die über S3-kompatible Endpunkte auf Speicherorte verweisen. Beschreibungen der allgemeinen Parameter finden Sie unter CREATE STAGE.

URL = 's3compat://bucket[/path/]'

URL für den externen Speicherort (vorhandener Bucket, auf den über einen S3-kompatiblen API-Endpunkt zugegriffen wird), der zum Speichern von Datendateien verwendet wird, wobei Folgendes gilt:

  • bucket ist der Name des Buckets.

  • path ist ein optionaler Pfad mit Unterscheidung von Groß-/Kleinschreibung (oder Präfix in S3-Terminologie) für Dateien am Cloudspeicherort (d. h. Dateien mit Namen, die mit einer gemeinsamen Zeichenfolge beginnen).

ENDPOINT = 's3_api_compatible_endpoint'

Vollqualifizierte Domäne, die auf den S3-kompatiblen API-Endpunkt verweist.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE STAGE

Schema

Erforderlich, wenn ein neuer Stagingbereich erstellt wird.

USAGE

Dateiformat

Nur erforderlich, wenn in der Stagingbereichsdefinition auf ein benanntes Dateiformat verwiesen wird.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Der Zugriff auf S3-kompatiblen Speicher erfordert direkte Anmeldeinformationen.

Beispiele

Erstellen Sie einen externen Stagingbereich mit dem Namen my_s3compat_stage, der auf den Bucket und den Pfad my_bucket/files/ am Endpunkt mystorage.com verweist:

CREATE STAGE my_s3compat_stage
  URL = 's3compat://my_bucket/files/'
  ENDPOINT = 'mystorage.com'
  CREDENTIALS = (AWS_KEY_ID = '1a2b3c...' AWS_SECRET_KEY = '4x5y6z...')
Copy

Beachten Sie, dass die in diesem Beispiel verwendeten Werte AWS_KEY_ID und AWS_SECRET_KEY nur zur Veranschaulichung dienen.

Laden und Entladen von Daten

Laden und entladen Sie Daten mithilfe externer Stagingbereiche, die Sie in Erstellen von externen Stagingbereichen (unter diesem Thema) erstellt haben. Die folgenden Features stehen für Ihre externen Stagingbereiche zur Verfügung:

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zum Laden oder Entladen von Daten verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

USAGE

Stagingbereich

USAGE

Dateiformat

Nur erforderlich, wenn in der COPY INTO <Tabelle>- oder COPY INTO <Speicherort>-Anweisung auf ein benanntes Dateiformat verwiesen wird.

INSERT

Tabelle

Quell- oder Zieltabelle für das Laden oder Entladen von Daten.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Erweitern von Data Lakes mit externen Tabellen

Externe Tabellen ermöglichen das Abfragen von Daten, die in einem externen Cloudspeicher gespeichert sind, zur Verwendung in Analysen, ohne dass die Daten zuerst in Snowflake geladen werden müssen.

Erstellen externer Tabellen

Erstellen Sie externe Tabellen mit CREATE EXTERNAL TABLE, die auf die externen Stagingbereiche verweisen, die Sie in Erstellen von externen Stagingbereichen (unter diesem Thema) erstellt haben.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE EXTERNAL TABLE

Schema

USAGE

Stagingbereich

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Nutzungshinweise

  • Die Metadaten dieser externen Tabellen können nicht automatisch aktualisiert werden. Die Parametereinstellung AUTO_REFRESH = TRUE wird nicht unterstützt.

    Sie müssen die Metadaten Ihrer externen Tabellen manuell aktualisieren. Weitere Informationen dazu finden Sie unter Manuelles Aktualisieren der Metadaten externer Tabellen (unter diesem Thema).

Beispiele

Erstellen Sie eine externe Tabelle namens et, die auf den Unterpfad path1 in dem von Ihnen erstellten Stagingbereich my_s3compat_stage verweist. Das Format der Dateien in diesem Unterpfad ist Apache Parquet:

CREATE EXTERNAL TABLE et
 LOCATION=@my_s3compat_stage/path1/
 AUTO_REFRESH = FALSE
 REFRESH_ON_CREATE = TRUE
 FILE_FORMAT = (TYPE = PARQUET);
Copy

Manuelles Aktualisieren der Metadaten von externen Tabellen

Führen Sie in regelmäßigen Abständen eine ALTER EXTERNAL TABLE … REFRESH-Anweisung aus, um alle hinzugefügten oder entfernten Dateien zu registrieren.

Nur der Eigentümer der externen Tabelle (d. h. die Rolle mit der Berechtigung OWNERSHIP für die externe Tabelle) oder ein Benutzer mit weitreichenderen Berechtigungen kann diesen Befehl ausführen. Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Abfragen von externen Tabellen

Nachdem die Metadaten der externen Tabellen aktualisiert worden sind, können die Benutzer die externen Tabellen abfragen.

Eine Rolle, die zur Abfrage einer externen Tabelle verwendet wird, muss über die Berechtigung USAGE für die externe Tabelle verfügen. Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Fragen Sie beispielsweise die Spalten col1 und col2 in der von Ihnen erstellten externen Tabelle ab:

SELECT col1, col2 FROM et;
Copy

Die Abfrageleistung variiert je nach Netzwerk- und Anwendungs- bzw. Geräteleistung.

Anbieterunterstützung für S3-kompatiblen Speicher

Geräte oder Anwendungen mit einer S3-kompatiblen API können mit Snowflake verwendet werden. Für die Sicherstellung der Konformität ist der Speicherdienstanbieter verantwortlich.

Die folgenden Anbieter haben Snowflake mitgeteilt, dass sie zumindest einige ihrer Produkte getestet haben und dass diese mit Snowflake funktionieren:

  • Cloudian

  • Dell

  • Hitachi Content Platform

  • MinIO

  • NetApp (StorageGRID)

  • PureStorage

  • Scality

Diese Liste dient lediglich als Orientierung. Snowflake testet keine externen Produkte, um die Kompatibilität zu überprüfen, und kann keine Probleme in Produkten von Drittanbietern beheben. Wenn Sie Fragen dazu haben, ob oder wie Ihre Hardware oder Software mit einer S3-API mit Snowflake funktioniert, empfehlen wir Ihnen, sich direkt an den Hersteller zu wenden.

Testen Ihrer S3-kompatiblen API

Wenn Sie ein Entwickler von Hardware oder Software mit eine S3-API sind, können Sie unsere öffentliche Testsuite (in GitHub) verwenden, um Ihre S3-API zu testen. Dieser Satz von Tests sucht nach offensichtlichen Abweichungen zwischen Ihrer Implementierung und dem, was Snowflake von S3 erwartet. Beachten Sie, dass es Fälle geben kann, in denen die Tests keine Inkompatibilität feststellen.

Wenn Sie als Kunde Ihre eigenen Geräte testen möchten, empfehlen wir Ihnen, sich an Ihren Anbieter zu wenden, um diese Tests auszuführen. Sie können diese öffentlichen Tests jedoch auch auf Ihren Geräten ausführen, um die Kompatibilität zu beurteilen.