Speicher für Apache Iceberg™-Tabellen¶
Snowflake-Tabellen verwenden in der Regel Speicher, den Snowflake verwaltet. Im Gegensatz dazu verwenden die Apache Iceberg™-Tabellen in Snowflake einen externen Speicher, den Sie konfigurieren und warten.
Dieses Thema enthält konzeptionelle Informationen und bewährte Verfahren für den Speicher von Iceberg-Tabellen.
Snowflake Zugriff auf Ihren Speicher erteilen¶
Um Snowflake Zugriff auf Ihre Speicherorte für Iceberg-Tabellen zu gewähren, verwenden Sie den Identitäts- und Zugriffsverwaltungsdienst Ihres Cloudanbieters. Sie gewähren einer Identität oder einem Prinzipal begrenzten Zugriff auf Ihren Speicher, ohne Geheimnisse auszutauschen. Dies ist das gleiche Zugriffsmodell, das Snowflake auch für andere Integrationen verwendet, einschließlich Speicherintegrationen.
Snowflake stellt einen Prinzipal für Ihr gesamtes Snowflake-Konto bereit, wenn Sie ein externes Volume erstellen. Der Prinzipal, ist je nach Cloudanbieter, wie folgt:
Cloudanbieter |
Von Snowflake bereitgestellter Prinzipal |
---|---|
Amazon Web Services (AWS) |
|
Google Cloud |
|
Azure |
Snowflake authentifiziert sich direkt bei Ihrem Anbieter, und der von Snowflake bereitgestellte Prinzipal nimmt eine von Ihnen festgelegte Rolle an. Die Rolle muss die Berechtigung haben, Operationen an Ihrem Speicherort auszuführen. Snowflake kann zum Beispiel nur dann von einem Speicherort lesen, wenn die Rolle die Berechtigung hat, von diesem Speicherort zu lesen.
Snowflake benötigt die Erlaubnis, die folgenden Aktionen auf Iceberg-Tabellen auszuführen:
Snowflake-verwaltete Tabellen |
Tabellen, die einen externen Iceberg-Katalog verwenden |
|
---|---|---|
Amazon S3 |
|
|
Google Cloud Storage |
|
|
Azure Storage |
Alle zulässigen Aktionen für die Rolle Storage Blob Data Contributor |
Alle zulässigen Aktionen für die Rolle Storage Blob Data Reader |
Bemerkung
Die Berechtigung s3:PutObject
erteilt Schreibzugriff auf den Speicherort des externen Volumes. Um den Schreibzugriff vollständig zu konfigurieren, müssen Sie den Parameter ALLOW_WRITES
des externen Volumes auf TRUE
(den Standardwert) setzen.
Jedes externe Volume ist mit einem bestimmten Aktiver Speicherort verbunden, und ein einzelnes externes Volume kann mehrere Iceberg-Tabellen unterstützen. Die Anzahl der externen Volumes, die Sie benötigen, hängt jedoch davon ab, wie Sie Ihre Tabellendaten speichern, organisieren und sichern möchten.
Sie können ein einziges externes Volume verwenden, wenn Sie die Daten und Metadaten für alle Ihre Snowflake-Iceberg-Tabellen in Unterverzeichnissen unter demselben Speicherort (z. B. im selben S3 Bucket) haben möchten. Um diese Verzeichnisse für von Snowflake verwaltete Tabellen zu konfigurieren, siehe Daten- und Metadatenverzeichnisse.
Alternativ können Sie auch mehrere externe Volumes erstellen, um verschiedene Speicherorte unterschiedlich zu sichern. Sie könnten zum Beispiel die folgenden externen Volumes erstellen:
Ein externes Volume mit Lesezugriff für extern verwaltete Iceberg-Tabellen.
Ein externes Volume, das mit Lese- und Schreibzugriff für von Snowflake verwaltete Tabellen konfiguriert ist
Eine vollständige Anleitung, wie Sie Snowflake Zugriff auf Ihren Speicher für Iceberg-Tabellen gewähren, finden Sie unter den folgenden Themen:
Aktiver Speicherort¶
Jedes externe Volume unterstützt einen einzigen aktiven Speicherort. Wenn Sie mehrere Speicherorte in einer CREATE EXTERNAL VOLUME-Anweisung angeben, weist Snowflake einen Speicherort als aktiven Speicherort zu. Der aktive Speicherort bleibt während der gesamten Lebensdauer des externen Volumes gleich.
Die Zuweisung erfolgt, wenn Sie das externe Volume zum ersten Mal in einer CREATE ICEBERG TABLE-Anweisung verwenden. Snowflake verwendet die folgende Logik, um einen aktiven Speicherort auszuwählen:
Wenn die
STORAGE_LOCATIONS
-Liste einen oder mehrere lokale Speicherorte enthält, verwendet Snowflake den ersten lokalen Speicherort in der Liste. Ein lokaler Speicherort ist ein Speicherort bei demselben Cloudanbieter und in derselben Region wie Ihr Snowflake Konto.Wenn die Liste
STORAGE_LOCATIONS
keine lokalen Speicherorte enthält, wählt Snowflake den ersten Speicherort in der Liste aus.
Bemerkung
Cloud-/regionsübergreifende Iceberg-Tabellen werden nur unterstützt, wenn Sie einen externen Iceberg-Katalog verwenden. Weitere Informationen dazu finden Sie unter Cloud-/regionsübergreifende Unterstützung.
Externe Volumes, die vor der Snowflake-Version 7.44 erstellt wurden, haben möglicherweise eine andere Logik zur Auswahl eines aktiven Speicherorts verwendet.
Überprüfen des Speicherzugriffs¶
Um zu überprüfen, ob Snowflake sich erfolgreich bei Ihrem Speicheranbieter authentifizieren kann, rufen Sie die Funktion SYSTEM$VERIFY_EXTERNAL_VOLUME auf.
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Für Snowflake-verwaltete Tabellen überprüft Snowflake automatisch den Zugriff auf den aktiven Speicherort auf Ihrem externen Volume in den folgenden Situationen:
Wenn Sie das erste Mal dieses externe Volume in einer CREATE ICEBERG TABLE-Anweisung für eine von Snowflake verwaltete Tabelle angeben.
Wenn Sie zum ersten Mal eine Tabelle konvertieren, um Snowflake als Iceberg-Katalog zu verwenden.
Die Eigenschaft ALLOW_WRITES
des externen Volumes muss auf TRUE
gesetzt sein.
Snowflake versucht die folgenden Speicheroperationen auszuführen, um den Speicherort zu verifizieren.
Schreiben einer Testdatei.
Lesen der Datei.
Auflisten des Inhalts des Dateipfads.
Löschen der Datei.
Wenn eine der Operationen fehlschlägt, schlägt die Anweisung CREATE ICEBERG TABLE (oder ALTER ICEBERG TABLE … CONVERT TO MANAGED) fehl und Sie erhalten eine Fehlermeldung.
Dateiverwaltung¶
In diesem Abschnitt wird erklärt, wie die Verwaltung von Iceberg-Tabellendateien im Speicher je nach Typ der Iceberg-Tabelle funktioniert.
Snowflake-verwaltete Tabellen¶
Wichtig
Erlauben Sie anderen Tools keinen Zugriff für das Löschen oder Überschreiben von Objekten, die mit den von Snowflake verwalteten Iceberg-Tabellen verbunden sind.
Stellen Sie sicher, dass der Snowflake-Prinzipal den Zugriff auf Ihren Tabellenspeicher behält. Weitere Informationen dazu finden Sie unter Snowflake Zugriff auf Ihren Speicher erteilen.
Obwohl Sie die Speicherorte für Iceberg-Tabellen konfigurieren und verwalten, arbeitet Snowflake ausschließlich mit den Objekten in Ihrem Speicher (Daten- und Metadaten-Dateien), die zu von Snowflake verwalteten Tabellen gehören. Snowflake führt in regelmäßigen Abständen Wartungsarbeiten an diesen Tabellenobjekten durch, um die Abfrageleistung zu optimieren und gelöschte Daten zu bereinigen.
Abfragen können fehlschlagen, wenn andere Tools die von Snowflake verwalteten Tabellenobjekte löschen oder überschreiben. Ebenso schlagen Abfragen auf die Tabelle und die Tabellen-Wartungsoperationen von Snowflake fehl, wenn Sie dem Snowflake-Prinzipal den Zugriff auf Ihren Speicher entziehen.
Snowflake löscht Objekte nach Ablauf der Aufbewahrungsfrist der Tabelle, wenn die von Snowflake verwalteten Tabellendaten gelöscht werden oder die Tabelle gelöscht wird.
Daten- und Metadatenverzeichnisse¶
Für von Snowflake verwaltete Tabellen schreibt Snowflake Parquet-Datendateien und Tabellen-Metadaten in die folgenden Pfade Ihres externen Cloudspeicher:
STORAGE_BASE_URL/BASE_LOCATION/data/
STORAGE_BASE_URL/BASE_LOCATION/metadata/
Wobei:
STORAGE_BASE_URL
ist die Basis-URL für den aktiven Speicherort, der mit Ihrem externen Volume verbunden ist.BASE_LOCATION
ist der Name eines Verzeichnisses unter einem relativen Pfad Ihres externen Volumes (angegeben in Ihrer CREATE ICEBERG TABLE-Anweisung).
Angeben einer leeren Zeichenfolge für BASE_LOCATION
Wenn Sie eine leere Zeichenfolge (''
) für BASE_LOCATION
angeben, erstellt Snowflake die Verzeichnisse data/
und metadata/
direkt unter Ihrer STORAGE_BASE_URL
.
Beispiel: STORAGE_BASE_URL/data/
Verwenden desselben Speicherorts für mehrere Tabellen
Wenn Sie für mehrere Tabellen den gleichen Speicherort verwenden und den gleichen Basisspeicherort angeben, schreibt Snowflake die Daten für alle diese Tabellen in dasselbe data/
-Verzeichnis. In ähnlicher Weise schreibt Snowflake die Metadaten für alle diese Tabellen in dasselbe metadata/
-Verzeichnis.
Organisieren des Tabellenspeichers mit BASE_LOCATION
Um Dateien im Speicher für mehrere Iceberg-Tabellen unter derselben STORAGE_BASE_URL
zu organisieren, sollten Sie den Tabellennamen als BASE_LOCATION
in Ihrer CREATE ICEBERG TABLE-Anweisung verwenden. Auf diese Weise schreibt Snowflake Daten und Metadaten in ein Verzeichnis mit demselben Namen wie die Tabelle.
Beispiel:
CREATE OR REPLACE ICEBERG TABLE iceberg_table_1 (
col_1 int,
col_2 string
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'iceberg_external_volume'
BASE_LOCATION = 'iceberg_table_1';
CREATE OR REPLACE ICEBERG TABLE iceberg_table_2 (
col_1 int,
col_2 string
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'iceberg_external_volume'
BASE_LOCATION = 'iceberg_table_2';
Die Anweisung führt zu der folgenden Verzeichnisstruktur in Ihrem externen Cloudspeicher:
STORAGE_BASE_URL
|-- iceberg_table_1
| |-- data/
| |-- metadata/
|-- iceberg_table_2
| |-- data/
| |-- metadata/
Tabellen, die einen externen Katalog verwenden¶
Snowflake schreibt oder löscht keine Speicherobjekte für extern verwaltete Iceberg-Tabellen oder auf externen Volumes, bei denen die Eigenschaft ALLOW_WRITES
auf FALSE
gesetzt ist.
Für den Zugriff auf Ihre Tabellendaten und Metadaten übernimmt Snowflake die Rolle der Zugriffssteuerung, die Sie für Ihr externes Volume konfigurieren. Sie erteilen der Rolle die Berechtigung zum Zugriff auf einen Speicherort (in einem Bucket oder Container). Alle Ihre Tabellendaten- und Metadaten-Dateien müssen sich an diesem Speicherort befinden. Wenn Ihr Speicherort beispielsweise ein S3-Bucket ist, müssen alle Ihre Daten- und Metadaten-Dateien irgendwo in diesem Bucket vorhanden sein.
Außerdem werden bei der Konvertierung einer Tabelle keine Daten- oder Metadaten-Dateien neu geschrieben. Snowflake schreibt nur dann in eine Iceberg-Tabelle, wenn Sie eine Tabelle so konvertieren, dass sie Snowflake als Katalog verwendet.
Aktivieren von Speicherzugriffsprotokollen¶
Um Probleme zu diagnostizieren und den Zugriff auf die mit einem externen Volume verbundenen Speicherorte zu prüfen, können Sie die Speicherprotokollierung aktivieren. Speicherprotokolle helfen Ihnen, die Ursache für fehlende oder beschädigte Dateien zu ermitteln.
Aktivieren Sie die Protokollierung bei Ihrem Anbieter. Da Sie den Speicher für die Iceberg-Tabellen besitzen und verwalten, kann Snowflake keine Protokollierung oder Prüfung für Ihre Iceberg-Speicherorte aktivieren.
Weitere Informationen zu den Speicherzugriffsprotokollen Ihres Anbieters finden Sie unter folgenden externen Themen:
Schutz von Dateien durch Versionierung und Speicherung von Objekten¶
Wenn sich Ihre Iceberg-Tabellendaten in einem zentralen Daten-Repository (oder Data Lake) befinden, der von mehreren Tools und Diensten genutzt wird, kann es zu einer versehentlichen Löschung oder Beschädigung kommen. Um die Daten von Iceberg-Tabellen zu schützen und die Wiederherstellung versehentlich gelöschter oder überschriebener Daten sicherzustellen, verwenden Sie die von Ihrem Anbieter angebotenen Optionen zur Verwaltung des Speicherlebenszyklus und zur Versionierung.
Mit der Lebenszyklusverwaltung können Sie Aufbewahrungs- und Verfolgungsregeln für Speicherobjekte festlegen. Wenn Sie mehr über das Lifecycle Management Ihres Anbieters erfahren möchten, lesen Sie die folgenden externen Themen:
Um die Wiederherstellung von Objekten zu unterstützen, können Sie auch die Versionierung für Ihren externen Cloudspeicher aktivieren.
Weitere Informationen zum Aktivieren der Versionierung für Amazon S3 finden Sie unter Aktivieren der Versionierung für Buckets.
Weitere Informationen zum Aktivieren der Versionierung für Google Cloud Storage finden Sie unter Objektversionierung verwenden.
Weitere Informationen zum Aktivieren der Versionierung für Azure finden Sie unter Blob-Versionierung aktivieren.
Verschlüsseln von Tabellendateien¶
Snowflake kann Iceberg-Tabellendateien im Speicher lesen, die Sie mit gängigen serverseitigen Verschlüsselungsverfahren (Server-Side Encryption, SSE) verschlüsseln. Sie sollten Ihren Clouddienstanbieter mit der Verwaltung von Verschlüsselungsschlüsseln beauftragen und dem Snowflake-Prinzipal Zugriff auf Ihre Schlüssel gewähren, wenn Sie einen vom Kunden verwalteten Schlüssel nutzen.
Für Amazon S3 unterstützt Snowflake die folgenden SSE-Optionen:
SSE-Option |
Konfiguration |
---|---|
SSE mit Amazon S3-verwalteten Schlüsseln (SSE-S3) |
Geben Sie |
SSE mit AWS-KMS-Schlüssel (SSE-KMS) |
Geben Sie Sie müssen auch die Berechtigungen erteilen, die für die SSE-KMS-Verschlüsselung erforderlich sind. Eine Anleitung dazu finden Sie in Schritt 3 von Externes Volume für Amazon S3 konfigurieren. |
Für Google Cloud Storage unterstützt Snowflake die folgende SSE-Option:
SSE-Option |
Konfiguration |
---|---|
SSE mit Google Cloud-KMS-gespeicherten Schlüsseln |
Geben Sie Sie müssen auch GCS-Dienstkonto Berechtigungen für die Schlüssel des Google Cloud Key Management Service zuweisen. |