Eine Snowflake-verwaltete Tabelle mit Snowflake Open Catalog synchronisieren¶
Um eine von Snowflake verwaltete Apache Iceberg™-Tabelle mit einer Drittanbieter-Engine wie Apache Spark™ abzufragen, können Sie die Tabelle mit Snowflake Open Catalog synchronisieren.
Unter diesem Thema erfahren Sie, wie Sie eine von Snowflake verwaltete Iceberg-Tabelle mit Snowflake Open Catalog über eine Katalogintegration in Snowflake und einen externen Katalog in Open Catalog synchronisieren.
Wichtig
Wenn Ihre Drittanbieter-Engine nur Tabellen abfragen kann, die sich bis zur zweiten Namespace-Ebene in einem Katalog befinden, müssen Sie die von Snowflake verwaltete Iceberg-Tabelle mit einem übergeordneten Namespace mit Open Catalog synchronisieren. Andernfalls wird Snowflake die Tabelle mit der dritten Namespace-Ebene in Open Catalog synchronisieren und Sie können die Tabelle nicht abfragen.
Um eine von Snowflake verwaltete Iceberg-Tabelle mit einem statt zwei übergeordneten Namespaces zu synchronisieren, setzen Sie die Eigenschaft CATALOG_SYNC_NAMESPACE_MODE bei der Erstellung der Datenbank auf FLATTEN
. Weitere Informationen dazu finden Sie unter CREATE DATABASE. Sie können diesen Modus für eine bestehende Datenbank nicht ändern. Tabellen in einer bestehenden Datenbank mit CATALOG_SYNC werden mit zwei übergeordneten Namespaces mit Open Catalog synchronisiert.
Schritt 1: Legen Sie einen BASE_LOCATION_PREFIX fest¶
Snowflake schreibt die Dateien für jede Iceberg-Tabelle in ein Verzeichnis, das eine dynamisch generierte Zeichenfolge enthält (zufällige ID).
Um sicherzustellen, dass Open Catalog alle von Snowflake verwalteten Tabellen sehen kann, die Sie synchronisieren, empfehlen wir Ihnen, auf Konto-, Datenbank- oder Schemaebene ein BASE_LOCATION_PREFIX (z. B. my-open-catalog-tables
) zu verwenden und den Parameter BASE_LOCATION in Ihren CREATE ICEBERG TABLE-Anweisungen wegzulassen. Auf diese Weise werden die Dateien für alle Iceberg-Tabellen, die Sie in dem Konto, der Datenbank oder dem Schema erstellen, in einem bekannten Verzeichnis mit demselben Namen wie das Präfix organisiert. Weitere Informationen finden Sie unter Daten- und Metadatenverzeichnisse für Snowflake-verwaltete Tabellen <label-tables_iceberg_configure_external_volume_base_location>
.
Die folgende Anweisung setzt einen BASE_LOCATION_PREFIX für ein Schema namens open_catalog
:
ALTER SCHEMA open_catalog
SET BASE_LOCATION_PREFIX = 'my-open-catalog-tables';
Schritt 2: Erstellen Sie ein externes Volume¶
Wenn Sie noch keins haben, beginnen Sie mit der Erstellung eines externen Volume in Snowflake, das Zugriff auf den Speicherort in der Cloud bietet, an dem Sie Ihre Tabellendaten und Metadaten speichern möchten.
Bemerkung
Fügen Sie den BASE_LOCATION_PREFIX nicht in den Pfad ein, den Sie für die STORAGE_BASE_URL angeben.
Füllen Sie die Anweisungen für Ihren Cloudspeicherdienst aus:
Schritt 3: Konfigurieren Sie Open Catalog-Ressourcen¶
Als Nächstes führen Sie die Schritte in diesem Abschnitt aus, um einen externe Katalog und eine Dienstverbindung in Ihrem Open Catalog-Konto zu erstellen.
Folgen Sie den Anweisungen unter Katalog erstellen, um einen externen Katalog in Ihrem Open Catalog-Konto zu erstellen. Stellen Sie sicher, dass die folgenden Einstellungen für den externen Katalog konfiguriert sind:
Die Umschaltfunktion External ist aktiviert.
Die Default base location kombiniert die
STORAGE_BASE_URL
für das externe Volume, das Sie in Schritt 2: Erstellen Sie ein externes Volume erstellt haben, und denBASE_LOCATION_PREFIX
, den Sie für das Schema festgelegt haben; zum Beispielhttps://<storage_base_url>/<base_url_prefix>/
.
Open Catalog synchronisiert Ihre von Snowflake verwalteten Tabellen mit diesem externen Katalog.
Wenn Sie noch keine Dienstverbindung für Snowflake haben, folgen Sie den Anweisungen unter Konfigurieren Sie eine Dienstverbindung, um eine Verbindung für die Snowflake-Engine in Ihrem Open Catalog-Konto zu erstellen.
Konfigurieren Sie eine Katalogrolle für Ihren externen Katalog mit Berechtigungen, die den Zugriff auf Ihren externen Katalog ermöglichen. Anweisungen finden Sie unter Berechtigungen für einen Katalog erteilen.
Die Katalogrolle muss über die folgenden Berechtigungen für den Katalog verfügen:
TABLE_CREATE
TABLE_WRITE_PROPERTIES
TABLE_DROP
NAMESPACE_CREATE
NAMESPACE_DROP
Sie können entweder der Katalogrolle jede dieser Berechtigungen erteilen oder aber die Berechtigung CATALOG_MANAGE_CONTENT erteilen, die diese Berechtigungen beinhaltet. Weitere Informationen finden Sie unter Katalogberechtigungen für Snowflake Open Catalog.
Verbinden Sie die Katalogrolle mit der Prinzipalrolle für Ihre Dienstverbindung. Damit kann die Dienstverbindung auf den Katalog zugreifen. Anweisungen finden Sie unter Einer Prinzipalrolle eine Katalogrolle zuweisen.
Schritt 4: Eine Katalogintegration für Open Catalog erstellen¶
Erstellen Sie eine Katalogintegration für Open Catalog mit dem Befehl CREATE CATALOG INTEGRATION (Snowflake Open Catalog).
Geben Sie für CATALOG_NAME den Namen des externen Katalogs an, den Sie in Ihrem Open Catalog Konto konfiguriert haben. Snowflake synchronisiert die Tabelle und ihren übergeordneten Namespace in Snowflake mit diesem externen Katalog in Open Catalog. Wenn Sie beispielsweise eine db1.public.table1
-Iceberg-Tabelle in Snowflake registriert haben und catalog1
in der Katalogintegration angeben, synchronisiert Snowflake die Tabelle mit Open Catalog und verwendet den folgenden vollqualifizierten Namen: catalog1.db1.public.table1
.
Informationen zur Behebung von Problemen bei der Erstellung einer Katalogintegration finden Sie unter Sie können keine Katalogintegration für Open Catalog erstellen.
CREATE OR REPLACE CATALOG INTEGRATION my_open_catalog_int
CATALOG_SOURCE = POLARIS
TABLE_FORMAT = ICEBERG
REST_CONFIG = (
CATALOG_URI = 'https://<orgname>-<my-snowflake-open-catalog-account-name>.snowflakecomputing.com/polaris/api/catalog'
CATALOG_NAME = 'myOpenCatalogExternalCatalogName'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_CLIENT_ID = 'myClientId'
OAUTH_CLIENT_SECRET = 'myClientSecret'
OAUTH_ALLOWED_SCOPES = ('PRINCIPAL_ROLE:ALL')
)
ENABLED = TRUE;
Bemerkung
Sie können diese Katalogintegration verwenden, um eine oder mehrere von Snowflake verwaltete Tabellen zu synchronisieren.
Schritt 5: Katalogsynchronisierung einrichten¶
Damit Snowflake die von Snowflake verwalteten Iceberg-Tabellen mit Open Catalog synchronisieren kann, müssen Sie den externen Katalog in Open Catalog angeben, mit dem Snowflake die Tabellen synchronisieren soll. Um dies zu konfigurieren, setzen Sie den Parameter CATALOG_SYNC auf den Namen einer Katalogintegration für Open Catalog.
CATALOG_SYNC auf Datenbankebene einstellen¶
In diesem Beispiel wird der Parameter CATALOG_SYNC auf der Datenbankebene festgelegt. Nachdem Sie diese Anweisungen ausgeführt haben, synchronisiert Snowflake alle von Snowflake verwalteten Iceberg-Tabellen in der Datenbank db1
mit dem externen Katalog in Open Catalog, den Sie für die my_open_catalog_int
-Katalogintegration angegeben haben. Weitere Informationen dazu finden Sie unter dem Befehl ALTER DATABASE.
ALTER DATABASE db1 SET CATALOG_SYNC = 'my_open_catalog_int';
Sie können CATALOG_SYNC auch auf Datenbankebene einstellen, wenn Sie eine Datenbank erstellen. Beispiel:
CREATE DATABASE db2
CATALOG_SYNC = 'my_open_catalog_int';
Weitere Informationen dazu finden Sie unter CREATE DATABASE.
Legen Sie CATALOG_SYNC auf Schemaebene fest¶
In diesem Beispiel wird der Parameter CATALOG_SYNC auf der Schemaebene festgelegt. Nachdem Sie diese Anweisungen ausgeführt haben, synchronisiert Snowflake alle von Snowflake verwalteten Iceberg-Tabellen im Schema public
mit dem externen Katalog in Open Catalog, den Sie für die my_open_catalog_int
-Katalogintegration angegeben haben. Weitere Informationen dazu finden Sie unter dem Befehl ALTER SCHEMA.
ALTER SCHEMA public SET CATALOG_SYNC = 'my_open_catalog_int';
Sie können CATALOG_SYNC auch auf Schemaebene einstellen, wenn Sie ein Schema erstellen. Beispiel:
CREATE SCHEMA schema1
CATALOG_SYNC = 'my_open_catalog_int';
Weitere Informationen dazu finden Sie unter CREATE SCHEMA.
Bemerkung
Sie können auch Folgendes tun:
Stellen Sie CATALOG_SYNC auf der Ebene des Kontos oder der Tabelle ein.
Überschreiben Sie CATALOG_SYNC auf verschiedenen Ebenen. Sie können z. B. CATALOG_SYNC auf Datenbankebene festlegen, aber dann den Wert für das Schema
myschema
innerhalb der Datenbank überschreiben. Dies hat zur Folge, dass die von Snowflake verwalteten Iceberg-Tabellen im Schemamyschema
mit einem anderen externen Katalog in Open Catalog synchronisiert werden als die anderen von Snowflake verwalteten Iceberg-Tabellen in der Datenbank.
Weitere Informationen dazu finden Sie unter CATALOG_SYNC und Parameterhierarchie und Typen.
Um den Namen der Katalogintegration für Open Catalog zu sehen, mit der eine von Snowflake verwaltete Iceberg-Tabelle synchronisiert wird, führen Sie den Befehl SHOW ICEBERG TABLES aus und sehen die Spalte
catalog_sync_name
in der Ausgabe.
Schritt 6: Eine Snowflake-verwaltete Tabelle erstellen¶
Erstellen Sie eine von Snowflake verwaltete Iceberg-Tabelle mit dem Befehl CREATE ICEBERG TABLE (Snowflake als Iceberg-Katalog).
Wichtig
Um sicherzustellen, dass die Zugriffsrechte im Open Catalog in der Tabelle korrekt durchgesetzt werden, achten Sie vor dem Erstellen der Tabelle darauf, dass sie bestimmte Bedingungen erfüllt. Diese Bedingungen beziehen sich auf die Hierarchie der Verzeichnisstruktur für den Katalog. Informationen dazu, wie Sie diese Bedingungen und Anweisungen erfüllen können, finden Sie in dem Hinweis Kataloginhalt organisieren in der Snowflake Open Catalog-Dokumentation.
USE SCHEMA open_catalog;
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (col1 INT)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume';
Für den BASE_LOCATION_PREFIX (my-open-catalog-tables
) und den Tabellennamen (my_iceberg_table
), die in den vorherigen Beispielanweisungen verwendet wurden, schreibt Snowflake die Tabellendateien in die folgenden Pfade:
STORAGE_BASE_URL/my-open-catalog-tables/my_iceberg_table.randomId/data/
STORAGE_BASE_URL/my-open-catalog-tables/my_iceberg_table.randomId/metadata/
Wenn Sie die Tabelle in Snowflake ändern, werden die Änderungen automatisch mit dem externen Katalog in Ihrem Open Catalog-Konto synchronisiert. Andere Engines wie Apache Spark™ können die Tabelle abfragen, indem sie eine Verbindung zu Open Catalog herstellen.
Informationen zur Fehlerbehebung bei der Erstellung einer von Snowflake verwalteten Tabelle finden Sie unter Sie können keine von Snowflake verwaltete Tabelle erstellen.