Utiliser une base de données liée à un catalogue pour les tables Apache Iceberg™¶
Avec une base de données liée à un catalogue, vous pouvez accéder à plusieurs tables Iceberg distantes de Snowflake sans créer de tables gérées en externe individuellement.
Une base de données liée à un catalogue est une base de données Snowflake connectée à un catalogue REST Iceberg externe. Snowflake se synchronise automatiquement avec le catalogue externe pour détecter les espaces de noms et les tables Iceberg et enregistre les tables distantes dans la base de données liée au catalogue. Les bases de données liées à un catalogue prennent également en charge la création et la suppression de schémas ou de tables Iceberg.
Considérations relatives à l’utilisation d’une base de données liée à un catalogue pour les tables Iceberg¶
Important
Pendant la période de prévisualisation, les bases de données liées à un catalogue ne prennent pas en charge le mode lecture seule. Si vous supprimez des tables ou écrivez des données, ces modifications sont également appliquées à votre catalogue distant.
Tenez compte des points suivants lorsque vous utilisez une base de données liée à un catalogue :
Prise en charge uniquement lorsque vous utilisez une intégration de catalogue pour REST Iceberg (par exemple, Snowflake Open Catalog).
Facturation : Pendant la période de prévisualisation, Snowflake ne facture pas les bases de données liées à un catalogue. La facturation démarre une fois que les bases de données liées à un catalogue Apache Iceberg™ deviennent disponibles de manière générale.
Pour limiter la découverte automatique des tables à un ensemble spécifique d’espaces de noms, utilisez le paramètre ALLOWED_NAMESPACES. Vous pouvez également utiliser le paramètre BLOCKED_NAMESPACES pour bloquer un ensemble d’espaces de noms.
Snowflake ne synchronise pas le contrôle d’accès au catalogue distant (utilisateurs ou rôles).
Vous pouvez créer des schémas ou des tables Iceberg gérées en externe dans une base de données liée à un catalogue. La création d’autres objets Snowflake n’est actuellement pas prise en charge.
Latence :
Pour les bases de données liées à 7 500 espaces de noms dans un catalogue distant, la découverte des espaces de noms et des tables prend environ une heure.
Pour les catalogues distants comportant 500 000 tables, le processus d’actualisation automatique prend environ une heure. Pour les espaces de noms ayant des exigences de latence différentes, nous vous recommandons de créer des bases de données liées à un catalogue distinctes. Chaque base de données doit référencer une intégration de catalogue avec un intervalle d’actualisation automatique approprié (REFRESH_INTERVAL_SECONDS).
Pour les tables Iceberg dans une base de données liée à un catalogue :
Snowflake ne copie pas les propriétés de la table de catalogue distante (telles que les politiques de conservation ou les tampons) et ne prend actuellement pas en charge la modification des propriétés de la table.
L’actualisation automatique est activée par défaut. Si l’
table-uuid
d’une table externe et la table de la base de données liée au catalogue ne correspondent pas, l’actualisation échoue et Snowflake supprime la table de la base de données liée au catalogue. Snowflake ne modifie pas la table distante.Si vous supprimez une table du catalogue distant, Snowflake supprime la table de la base de données liée au catalogue. Cette action est asynchrone, de sorte que vous ne verrez peut-être pas immédiatement cette modification dans le catalogue distant.
Si vous renommez une table dans le catalogue distant, Snowflake supprime la table existante de la base de données liée au catalogue et crée une table avec le nouveau nom.
Les politiques de masquage et les balises sont prises en charge. Les autres fonctionnalités spécifiques à Snowflake, notamment la réplication, le clonage et le partage, ne sont pas prises en charge.
Le caractère que vous choisissez pour le paramètre NAMESPACE_FLATTEN_DELIMITER ne peut pas apparaître dans vos espaces de noms distants. Pendant le processus de découverte automatique, Snowflake ignore tout espace de noms contenant le délimiteur et ne crée pas de schéma correspondant dans votre base de données liée à un catalogue.
Si vous spécifiez autre chose que
_
,$
, des lettres majuscules ou des chiffres pour le paramètre NAMESPACE_FLATTEN_DELIMITER, vous devez mettre le nom du schéma entre guillemets lorsque vous interrogez la table.Pour les bases de données liées à AWS Glue, vous devez utiliser des minuscules et mettre les noms de schémas, de tables et de colonnes entre guillemets doubles. Cela est également requis pour les autres catalogues REST Iceberg qui ne prennent en charge que les identificateurs en minuscules.
L’exemple suivant montre une requête valide :
CREATE SCHEMA "s1";
Les instructions suivantes ne sont pas valides, car elles utilisent des lettres majuscules ou omettent les guillemets doubles :
CREATE SCHEMA s1; CREATE SCHEMA "Schema1";
L’utilisation de UNDROP ICEBERG TABLE n’est pas prise en charge.
Le partage avec une annonce est pris en charge pour les tables qui utilisent un volume externe. Le partage direct n’est actuellement pas pris en charge.
Pour l’écriture dans les tables d’une base de données liée à un catalogue :
Les identifiants de connexion distribués ne sont pas pris en charge.
L’écriture dans des tables dans des espaces de noms imbriqués n’est actuellement pas prise en charge.
Flux de travail pour configurer l’accès à votre catalogue externe et au stockage de tables¶
Les étapes suivantes expliquent comment créer une base de données liée à un catalogue, vérifier l’état de synchronisation entre Snowflake et votre catalogue, et créer ou interroger une table dans la base de données.
Configurer l’accès à votre catalogue externe et au stockage de tables¶
Avant de créer une base de données liée à un catalogue, sélectionnez l’une des options suivantes pour configurer l’accès à votre catalogue externe et au stockage de tables :
Option 1 : Configurer un volume externe et une intégration de catalogue¶
Avec cette option, vous configurez un volume externe et une intégration de catalogue. Choisissez cette option si votre catalogue Iceberg distant ne prend pas en charge la distribution d’identifiants ou si vous souhaitez écrire dans les tables Iceberg de votre catalogue distant.
Tout d’abord, configurez un volume externe pour le service de stockage Cloud qui stocke les données et les métadonnées de vos tables Iceberg distantes :
Ensuite, configurez une intégration de catalogue pour votre catalogue Iceberg distant :
Option 2 : Configurer une intégration de catalogue avec des identifiants distribués¶
Note
Cette fonctionnalité n’est prise en charge que pour les tables qui stockent leurs données et métadonnées dans Amazon S3. Cette option n’est actuellement pas prise en charge pour les écritures externes.
Avec cette option, votre catalogue Iceberg distant doit prendre en charge la distribution d’identifiants.
Pour obtenir des instructions, voir Utiliser des identifiants de connexion distribués par catalogue pour les tables Apache Iceberg™.
Créer une base de données liée à un catalogue¶
Créez une base de données liée à un catalogue avec la commande CREATE DATABASE (liée à un catalogue) :
L’exemple suivant crée une base de données liée à un catalogue qui utilise un volume externe. Il spécifie un intervalle de synchronisation de 60 secondes (la valeur par défaut étant 30). L’intervalle de synchronisation indique à Snowflake à quelle fréquence interroger votre catalogue distant.
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int',
BLOCKED_NAMESPACES = ('my_blocked_namespace'),
NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
NAMESPACE_FLATTEN_DELIMITER = '-'
SYNC_INTERVAL_SECONDS = 60
)
EXTERNAL_VOLUME = 'my_external_vol';
Note
Cet exemple spécifie NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE
, qui indique à Snowflake de lier des tables dans tous les niveaux d’espace de noms de votre catalogue. Pour une table dans un espace de noms imbriqué, Snowflake utilise le paramètre NAMESPACE_FLATTEN_DELIMITER pour créer un espace de noms plat.
Pour plus d’informations, voir CREATE DATABASE (liée à un catalogue).
Vous pouvez également créer une base de données liée à un catalogue qui utilise des identifiants de connexion distribués. Cet exemple spécifie également un espace de noms autorisé.
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int_vended_creds',
ALLOWED_NAMESPACES = ('my_namespace')
);
Vérifier l’état de synchronisation du catalogue¶
Pour savoir si Snowflake a bien lié votre catalogue distant à votre base de données, utilisez la fonction SYSTEM$CATALOG_LINK_STATUS.
Cette fonction fournit également des informations pour vous aider à identifier les tables du catalogue distant qui ne parviennent pas à se synchroniser.
SELECT SYSTEM$CATALOG_LINK_STATUS('my_linked_db');
Interroger une table dans votre base de données liée à un catalogue¶
Une fois que vous avez créé une base de données liée à un catalogue, Snowflake démarre le processus de découverte de la table et interroge automatiquement votre catalogue lié en utilisant la valeur du paramètre SYNC_INTERVAL_SECONDS (avec un intervalle par défaut de 30 secondes) pour vérifier les modifications.
Dans la base de données, les espaces de noms autorisés du catalogue distant apparaissent sous la forme de schémas, et les tables Iceberg apparaissent sous leurs schémas respectifs.
Vous pouvez interroger les tables distantes en utilisant une instruction SELECT.
Note
Snowflake convertit automatiquement les identificateurs sans guillemets (noms de tables et de colonnes) en majuscules. Si votre catalogue Iceberg externe utilise des identificateurs sensibles à la casse, vous devez mettre les noms de tables et de colonnes entre guillemets doubles.
Pour plus d’informations sur les identificateurs d’objets, consultez Exigences relatives à l’identificateur.
Par exemple :
USE DATABASE my_linked_db;
SELECT * FROM my_namespace.my_iceberg_table
LIMIT 20;
Écrire dans votre catalogue distant¶
Vous pouvez utiliser Snowflake pour créer des espaces de noms et des tables Iceberg dans votre catalogue lié. Pour plus d’informations, consultez les rubriques suivantes :