Synchronisation d’une table gérée par Snowflake avec Snowflake Open Catalog¶
Pour interroger une table Apache Iceberg™ gérée par Snowflake à l’aide d’un moteur tiers tel qu’Apache Spark™, vous pouvez synchroniser la table avec Snowflake Open Catalog.
Cette rubrique explique comment synchroniser une table Iceberg gérée par Snowflake avec Snowflake Open Catalog à l’aide d’une intégration de catalogue dans Snowflake et d’un catalogue externe dans Open Catalog.
Important
Si votre moteur tiers ne peut interroger que des tables situées jusqu’au deuxième niveau d’espace de noms dans un catalogue, vous devez synchroniser la table Iceberg gérée par Snowflake avec Open Catalog en utilisant un seul espace de noms parent. Sinon, Snowflake synchronisera la table avec le troisième niveau de l’espace de noms dans Open Catalog et vous ne pourrez pas interroger cette table.
Pour synchroniser une table Iceberg gérée par Snowflake en utilisant un seul espace de noms parent au lieu de deux, donnez à la propriété CATALOG_SYNC_NAMESPACE_MODE la valeur FLATTEN
lorsque vous créez la base de données. Pour plus d’informations, voir CREATE DATABASE. Vous ne pouvez pas modifier ce mode pour une base de données existante. Les tables d’une base de données existante dont l’adresse CATALOG_SYNC est activée seront synchronisées avec Open Catalog en utilisant deux espaces de noms parents.
Étape 1 : Définir un BASE_LOCATION_PREFIX¶
Snowflake écrit les fichiers correspondant à chaque table Iceberg dans un répertoire qui comprend une chaîne générée dynamiquement (ID aléatoire).
Afin qu”Open Catalog puisse voir toutes les tables gérées par Snowflake que vous synchronisez, nous vous recommandons d’utiliser un paramètre BASE_LOCATION_PREFIX (tel que my-open-catalog-tables
) au niveau du compte, de la base de données ou du schéma, et d’omettre le paramètre BASE_LOCATION dans vos instructions CREATE ICEBERG TABLE. Cette opération organise les fichiers de toutes les tables Iceberg que vous créez dans le compte, la base de données ou le schéma au sein d’un répertoire connu dont le nom correspond à ce préfixe. Pour plus d’informations, voir Répertoires de données et de métadonnées pour les tables gérées par Snowflake <label-tables_iceberg_configure_external_volume_base_location>
.
L’instruction suivante permet de paramétrer un BASE_LOCATION_PREFIX pour un schéma nommé open_catalog
:
ALTER SCHEMA open_catalog
SET BASE_LOCATION_PREFIX = 'my-open-catalog-tables';
Étape 2 : Créer un volume externe¶
Si vous n’en avez pas déjà un, commencez par créer un volume externe dans Snowflake qui donne accès à l’emplacement de stockage Cloud où vous souhaitez stocker vos données de table et vos métadonnées.
Note
N’incluez pas le préfixe BASE_LOCATION_PREFIX dans le chemin que vous indiquez pour STORAGE_BASE_URL.
Suivez les instructions relatives à votre service de stockage dans le Cloud :
Étape 3 : Configurer les ressources Open Catalog¶
Ensuite, suivez les étapes de cette section pour créer un catalogue externe et une connexion de service dans votre compte Open Catalog.
Suivez les instructions dans Création d’un catalogue pour créer un catalogue externe dans votre compte Open Catalog. Assurez-vous que les paramètres suivants pour le catalogue externe sont configurés :
Le bouton bascule External est activé.
Le paramètre Default base location combine la valeur
STORAGE_BASE_URL
définie pour le volume externe que vous avez créé à l”Étape 2 : Créer un volume externe avec la valeurBASE_LOCATION_PREFIX
que vous avez paramétrée pour le schéma ; par exemple :https://<storage_base_url>/<base_url_prefix>/
.
Open Catalog synchronise vos tables gérées par Snowflake avec ce catalogue externe.
Si vous ne disposez pas encore de connexion de service pour Snowflake, suivez les instructions dans Configuration d’une connexion de service pour créer une connexion pour le moteur Snowflake dans votre compte Open Catalog.
Configurez un rôle de catalogue pour votre catalogue externe avec des privilèges permettant d’accéder à votre catalogue externe. Pour obtenir des instructions, voir Octroi de privilèges pour un catalogue.
Le rôle de catalogue doit disposer des privilèges suivants sur le catalogue :
TABLE_CREATE
TABLE_WRITE_PROPERTIES
TABLE_DROP
NAMESPACE_CREATE
NAMESPACE_DROP
Vous pouvez soit accorder chacun de ces privilèges au rôle de catalogue, soit accorder le privilège CATALOG_MANAGE_CONTENT, qui inclut ces privilèges. Pour plus d’informations, voir Privilèges du catalogue pour Snowflake Open Catalog.
Joignez le rôle de catalogue au rôle principal de votre connexion de service. Cela permet à la connexion de service d’accéder au catalogue. Pour obtenir des instructions, voir Accorder un rôle de catalogue à un rôle principal.
Étape 4 : Créer une intégration de catalogue pour Open Catalog¶
Créez une intégration de catalogue pour Open Catalog via la commande CREATE CATALOG INTEGRATION (Snowflake Open Catalog).
Pour CATALOG_NAME, spécifiez le nom du catalogue externe que vous avez configuré dans votre compte Open Catalog. Snowflake synchronise la table et son espace de noms parent dans Snowflake avec ce catalogue externe dans Open Catalog. Par exemple, si vous avez une table Iceberg db1.public.table1
enregistrée dans Snowflake et que vous spécifiez catalog1
dans l’intégration du catalogue, Snowflake synchronise la table avec Open Catalog avec le nom pleinement qualifié suivant : catalog1.db1.public.table1
.
Pour résoudre les problèmes liés à la création d’une intégration de catalogue, voir Impossible de créer une intégration de catalogue pour Open Catalog.
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;
Note
Vous pouvez utiliser cette intégration de catalogue pour synchroniser une ou plusieurs tables gérées par Snowflake.
Étape 5 : Paramétrer la synchronisation du catalogue¶
Pour que Snowflake synchronise les tables Iceberg gérées par Snowflake avec Open Catalog, vous devez spécifier le catalogue externe dans Open Catalog avec lequel Snowflake doit synchroniser les tables. Pour configurer cela, vous devez donner au paramètre CATALOG_SYNC le nom d’une intégration de catalogue pour Open Catalog.
Paramétrer CATALOG_SYNC au niveau de la base de données¶
Cet exemple permet de spécifier le paramètre CATALOG_SYNC au niveau de la base de données. Une fois ces instructions exécutées, Snowflake synchronise toutes les tables Iceberg gérées par Snowflake dans la base de données db1
avec le catalogue externe dans Open Catalog que vous avez spécifié pour l’intégration du catalogue my_open_catalog_int
. Pour plus d’informations, voir la commande ALTER DATABASE.
ALTER DATABASE db1 SET CATALOG_SYNC = 'my_open_catalog_int';
Vous pouvez également paramétrer CATALOG_SYNC au niveau de la base de données lorsque vous créez une base de données. Par exemple :
CREATE DATABASE db2
CATALOG_SYNC = 'my_open_catalog_int';
Pour plus d’informations, voir CREATE DATABASE.
Paramétrer CATALOG_SYNC au niveau du schéma¶
Cet exemple permet de spécifier le paramètre CATALOG_SYNC au niveau du schéma. Après avoir exécuté ces instructions, Snowflake synchronise toutes les tables Iceberg gérées par Snowflake dans le schéma public
avec le catalogue externe de Open Catalog que vous avez spécifié pour l’intégration du catalogue my_open_catalog_int
. Pour plus d’informations, voir la commande ALTER SCHEMA.
ALTER SCHEMA public SET CATALOG_SYNC = 'my_open_catalog_int';
Vous pouvez également paramétrer CATALOG_SYNC au niveau du schéma lorsque vous créez un schéma. Par exemple :
CREATE SCHEMA schema1
CATALOG_SYNC = 'my_open_catalog_int';
Pour plus d’informations, voir CREATE SCHEMA.
Note
Vous pouvez également procéder comme suit :
Paramétrez CATALOG_SYNC au niveau du compte ou de la table.
Remplacer CATALOG_SYNC à différents niveaux. Par exemple, vous pouvez paramétrer CATALOG_SYNC au niveau de la base de données, puis remplacer sa valeur pour le schéma
myschema
au sein de la base de données. Par conséquent, les tables Iceberg gérées par Snowflake dans le schémamyschema
se synchroniseront avec un catalogue externe Open Catalog différent de celui des autres tables Iceberg gérées par Snowflake dans la base de données.
Pour plus d’informations, voir CATALOG_SYNC et Hiérarchie des paramètres et types.
Pour connaître le nom de l’intégration de catalogue pour Open Catalog sur laquelle une table Iceberg gérée par Snowflake se synchronise, exécutez la commande SHOW ICEBERG TABLES et consultez la colonne
catalog_sync_name
dans la sortie.
Étape 6 : Créer une table gérée par Snowflake¶
Créez une table Iceberg gérée par Snowflake à l’aide de la commande CREATEICEBERGTABLE (Snowflake comme catalogue Iceberg).
Important
Pour que les privilèges d’accès dans Open Catalog soient appliqués correctement à la table, assurez-vous que la table remplit certaines conditions avant de la créer. Ces conditions concernent la hiérarchie de la structure du répertoire pour le catalogue. Pour connaître ces conditions et obtenir des instructions sur la manière de les remplir, consultez la note dans Organiser le contenu du catalogue dans la documentation Snowflake Open Catalog.
USE SCHEMA open_catalog;
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (col1 INT)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume';
Pour l’emplacement BASE_LOCATION_PREFIX (my-open-catalog-tables
) et le nom de table (my_iceberg_table
) utilisés dans les instructions de l’exemple précédent, Snowflake écrit les fichiers de la table dans les chemins suivants :
STORAGE_BASE_URL/my-open-catalog-tables/my_iceberg_table.randomId/data/
STORAGE_BASE_URL/my-open-catalog-tables/my_iceberg_table.randomId/metadata/
Lorsque vous modifiez la table dans Snowflake, les modifications sont automatiquement synchronisées avec le catalogue externe de votre compte Open Catalog. D’autres moteurs tels qu’Apache Spark™ peuvent interroger la table en se connectant à Open Catalog.
Pour la résolution des problèmes liés à la création d’une table gérée par Snowflake, voir Impossible de créer une table gérée par Snowflake.