Tables Iceberg¶
Une table Iceberg utilise la spécification de format de table ouvert Apache Iceberg, qui fournit une couche d’abstraction sur les fichiers de données stockés dans des formats ouverts et prend en charge des fonctions telles que :
Transactions ACID (atomicité, cohérence, isolation, durabilité)
Évolution du schéma
Partitionnement masqué
Instantanés de table
Les tables Iceberg pour Snowflake combinent les performances et la sémantique de requête des tables Snowflake standards avec le stockage cloud externe que vous gérez. Elles sont idéales pour les data lakes existants que vous ne pouvez pas, ou choisissez de ne pas, stocker dans Snowflake.
Snowflake prend en charge les tables Iceberg qui utilisent le format de fichier Apache Parquet.
Prise en main¶
Pour créer une table Iceberg, commencez par configurer un volume externe. Pour une introduction à l’utilisation des tables Iceberg dans Snowflake, voir Guide de démarrage rapide : Premiers pas avec les tables Iceberg.
Fonctionnement des tables Iceberg¶
Cette section fournit des informations spécifiques à l’utilisation de tables Iceberg dans Snowflake. Pour en savoir plus sur la spécification de format de table Iceberg, voir la documentation Apache Iceberg et les Spécifications des tables Iceberg officielles.
Stockage de données¶
Les tables Iceberg stockent leurs fichiers de données et de métadonnées dans un emplacement de stockage Cloud externe (Amazon S3, Google Cloud Storage ou Azure Storage). Le stockage externe ne fait pas partie de Snowflake. Vous êtes responsable de l’ensemble de la gestion de l’emplacement de stockage Cloud externe, y compris de la configuration de la protection et de la récupération de données. Snowflake ne fournit pas de stockage Fail-safe pour les tables Iceberg.
Snowflake se connecte à votre emplacement de stockage via un volume externe.
Les tables Iceberg n’entraînent aucun coût de stockage Snowflake. Pour plus d’informations, voir Facturation.
Volumes externes¶
Un volume externe est un objet Snowflake nommé, au niveau du compte, qui stocke une entité IAM (Identity and Access Management - Gestion de l’identité et de l’accès) pour votre stockage Cloud externe. Snowflake se connecte en toute sécurité à votre stockage Cloud avec un volume externe pour accéder aux données des tables, aux métadonnées Iceberg et aux fichiers manifestes qui stockent le schéma des tables, les partitions et d’autres métadonnées.
Un seul volume externe peut prendre en charge une ou plusieurs tables Iceberg.
Pour configurer un volume externe pour des tables Iceberg, voir Configurer un volume externe pour des tables Iceberg.
Catalogue Iceberg¶
Un catalogue Iceberg permet à un moteur de calcul de gérer et de charger des tables Iceberg. Le catalogue constitue la première couche architecturale de la spécification des tables Iceberg et doit prendre en charge :
Stockage du pointeur de métadonnées actuel pour une ou plusieurs tables Iceberg. Un pointeur de métadonnées mappe un nom de table vers l’emplacement du fichier de métadonnées actuel de cette table.
Exécution d’opérations atomiques permettant de mettre à jour le pointeur de métadonnées actuel d’une table.
Pour en savoir plus sur les catalogues Iceberg, voir la documentation Apache Iceberg.
Snowflake prend en charge différentes options de catalogue. Par exemple, vous pouvez utiliser Snowflake comme catalogue Iceberg, ou utiliser une intégration de catalogue pour connecter Snowflake à un catalogue Iceberg externe comme AWS Glue ou à des fichiers de métadonnées Iceberg dans le stockage d’objets.
Intégrations de catalogue¶
Une intégration de catalogue est un objet Snowflake nommé, au niveau du compte, qui définit la source des métadonnées et du schéma d’une table Iceberg lorsque vous n’utilisez pas Snowflake comme catalogue Iceberg.
Une seule intégration de catalogue peut prendre en charge une ou plusieurs tables Iceberg.
Pour configurer une intégration de catalogue pour des tables Iceberg, voir Configurer une intégration de catalogue pour des tables Iceberg.
Métadonnées et instantanés¶
Iceberg utilise un modèle de requête basé sur des instantanés, dans lequel les fichiers de données sont mappés à l’aide de fichiers manifestes et de métadonnées. Un instantané représente l’état d’une table à un moment donné et est utilisé pour accéder à l’ensemble complet de fichiers de données de la table.
Snowflake utilise le paramètre DATA_RETENTION_TIME_IN_DAYS pour gérer les métadonnées de différentes manières suivant le type de table Iceberg.
Note
La spécification du nombre minimal d’instantanés par défaut avec la history.expire.min-snapshots-to-keep
propriété de table n’est prise en charge pour aucun type de table Iceberg.
Tables qui utilisent Snowflake comme catalogue Iceberg
Pour ce type de table, Snowflake génère périodiquement des métadonnées et les écrit dans les fichiers Parquet de la table sur votre volume externe.
Snowflake utilise la valeur de DATA_RETENTION_TIME_IN_DAYS pour déterminer les points suivants :
Quand faire expirer les anciens instantanés de table pour réduire la taille des métadonnées de table.
Durée de conservation des métadonnées de table pour prendre en charge Time Travel et annulation de la suppression de la table. À l’expiration de la période de conservation, Snowflake supprime de l’emplacement de votre volume externe l’ensemble des métadonnées et instantanés de table qu’il a écrits pour cette table.
Note
Snowflake ne prend pas en charge Fail-safe pour les tables Iceberg, car les données de table se trouvent dans un stockage Cloud externe que vous gérez. Pour protéger les données des tables Iceberg, vous devez configurer la protection et la récupération des données auprès de votre fournisseur Cloud.
Tables qui utilisent une intégration de catalogue
Snowflake utilise la valeur de DATA_RETENTION_TIME_IN_DAYS pour définir une période de conservation pour Snowflake Time Travel et l’annulation de la suppression de la table. À l’expiration de la période de conservation, Snowflake ne supprime pas de votre stockage Cloud externe les métadonnées ni les instantanés Iceberg de la table.
Pour définir DATA_RETENTION_TIME_IN_DAYS pour ce type de table, Snowflake récupère la valeur de history.expire.max-snapshot-age-ms
auprès du fichier de métadonnées existant, puis convertit la valeur en jours (en arrondissant à l’unité inférieure).
Si Snowflake ne trouve pas history.expire.max-snapshot-age-ms
dans le fichier de métadonnées, ou ne peut pas analyser la valeur, il définit DATA_RETENTION_TIME_IN_DAYS sur une valeur par défaut de 5 jours (la valeur par défaut d’Apache Iceberg).
Prise en charge inter-Cloud/interrégionale¶
La prise en charge inter-Cloud/interrégionale dépend du type de table Iceberg.
Type de table |
Prise en charge inter-Cloud/interrégionale |
Remarques |
---|---|---|
Tables qui utilisent une intégration de catalogue |
✔ |
Si l’emplacement de stockage actif de votre volume externe ne se trouve pas chez le même fournisseur Cloud ou dans la même région que votre compte Snowflake, les limitations suivantes s’appliquent :
Si votre compte Snowflake et votre volume externe se trouvent dans des régions différentes, votre compte de stockage Cloud externe encourt des coûts de sortie lorsque vous interrogez la table. |
Tables qui utilisent Snowflake comme catalogue Iceberg |
❌ |
Votre volume externe doit spécifier un emplacement de stockage actif chez le même fournisseur Cloud (dans la même région) que celui qui héberge votre compte Snowflake. Si aucun emplacement actif ne se trouve dans la même région, l’instruction CREATE ICEBERG TABLE renvoie une erreur d’utilisateur. |
Facturation¶
Snowflake facture votre compte pour l’utilisation (le calcul) de l’entrepôt virtuel et les services Cloud lorsque vous utilisez des tables Iceberg.
Snowflake ne facture pas votre compte pour les coûts suivants :
Coûts de stockage des tables Iceberg. Votre fournisseur de stockage Cloud vous facture directement pour l’utilisation du stockage de données.
Octets actifs utilisés par les tables Iceberg. En revanche, Vue TABLE_STORAGE_METRICS affiche les ACTIVE_BYTES des tables Iceberg afin de vous aider à déterminer la quantité d’espace de stockage occupée par une table.
Note
Si votre compte Snowflake et votre volume externe se trouvent dans des régions différentes, votre compte de stockage Cloud externe encourt des coûts de sortie lorsque vous interrogez la table.
Options de catalogue Iceberg¶
Lorsque vous créez une table Iceberg dans Snowflake, vous pouvez utiliser Snowflake comme catalogue Iceberg ou vous pouvez utiliser une intégration de catalogue.
Le tableau suivant résume les différences entre ces options de catalogue.
Accès en lecture |
✔ |
✔ |
Accès en écriture |
✔ |
❌ Pour une prise en charge de plateforme complète, vous pouvez convertir la table de sorte à utiliser Snowflake comme catalogue. |
Stockage des données et des métadonnées |
Volume externe (stockage Cloud) |
Volume externe (stockage Cloud) |
Prise en charge de plateforme complète |
✔ |
❌ |
Fonctionne avec le SDK du catalogue Iceberg Snowflake |
✔ |
✔ |
Utiliser Snowflake comme catalogue Iceberg¶
Une table Iceberg qui utilise Snowflake comme catalogue Iceberg offre une prise en charge de plateforme Snowflake complète avec un accès en lecture et en écriture. Les données et métadonnées de la table sont stockées dans un stockage Cloud externe auquel Snowflake accède via un volume externe. Snowflake prend en charge la maintenance tout au long du cycle de vie de la table, comme le compactage.
Utiliser une intégration de catalogue¶
Une table Iceberg qui utilise une intégration de catalogue offre une prise en charge de plateforme Snowflake limitée, avec un accès en lecture seule. Les données et métadonnées de la table sont stockées dans un stockage Cloud externe auquel Snowflake accède via un volume externe. Avec ce type de table, Snowflake utilise l’intégration de catalogue pour récupérer des informations sur les métadonnées et le schéma Iceberg. Snowflake ne prend en charge aucune gestion du cycle de vie de la table.
Vous pouvez utiliser cette option pour créer une table Iceberg qui utilise un catalogue Iceberg externe, tel que AWS Glue, ou pour créer une table à partir de fichiers de métadonnées Iceberg dans le stockage d’objets. Le diagramme suivant montre comment une table Iceberg utilise une intégration de catalogue avec un catalogue Iceberg externe.
Considérations et limites¶
Les considérations et limites suivantes s’appliquent aux tables Iceberg et sont susceptibles d’être modifiées :
Iceberg
Les versions 1 et 2 de la spécification Apache Iceberg sont prises en charge, à l’exception des `fonctions <https://iceberg.apache.org/spec/> suivantes`_:
Suppressions au niveau des lignes (suppressions de position ou d’égalité).
Utilisation de la
history.expire.min-snapshots-to-keep
propriété de table pour spécifier le nombre minimal d’instantanés à conserver par défaut. Pour plus d’informations, voir Métadonnées et instantanés.Le partitionnement Iceberg avec la fonction de transformation
bucket
a un impact sur les performances des requêtes qui utilisent des clauses conditionnelles pour filtrer les résultats.Les tables Iceberg créées à partir de fichiers dans le stockage d’objets ne sont pas prises en charge si les conditions suivantes sont remplies :
La table contient une spécification de partition qui définit une transformation d’identité.
La colonne source de la spécification de partition n’existe pas dans un fichier Parquet.
Pour les tables Iceberg non gérées par Snowflake, la fonction Time Travel vers n’importe quel instantané généré après la création de la table est prise en charge à condition que vous actualisiez périodiquement la table avant l’expiration de l’instantané.
Formats de fichier
La prise en charge est limitée aux fichiers Apache Parquet.
Les fichiers Parquet qui utilisent le type logique d’entier non signé ne sont pas pris en charge.
Volumes externes
Vous devez accéder aux emplacements de stockage Cloud dans les volumes externes via des identifiants de connexion directs. Les intégrations de stockage ne sont pas prises en charge.
La relation de confiance doit être configurée séparément pour chaque volume externe que vous créez.
Fichiers de métadonnées
Les fichiers de métadonnées n’identifient pas l’instantané le plus récent d’une table Iceberg.
Vous ne pouvez pas modifier l’emplacement des fichiers de données ou de l’instantané à l’aide de la commande ALTER ICEBERG TABLE. Pour modifier l’un ou l’autre de ces paramètres, vous devez recréer la table (via la syntaxe CREATE OR REPLACE ICEBERG TABLE).
Fonctions Snowflake
Les fonctions et actions suivantes ne sont actuellement pas prises en charge sur les tables Iceberg :
Création d’un clone à partir d’une table Iceberg. En outre, les clones de bases de données et de schémas n’incluent pas de tables Iceberg.
Application automatique de balises à l’aide de la procédure stockée ASSOCIATE_SEMANTIC_CATEGORY_TAGS.
Évolution du schéma Snowflake. Toutefois, les tables Iceberg qui utilisent Snowflake comme catalogue prennent en charge l’évolution du schéma Iceberg.
Note
Les tables créées avant la version 7.42 de Snowflake ne prennent pas en charge pas l’évolution du schéma Iceberg.
Création de tables Iceberg temporaires ou transitoires.
Réplication de tables Iceberg, de volumes externes ou d’intégrations de catalogue.
En outre, si une base de données principale contient une table Iceberg, celle-ci entraîne l’échec de l’opération d’actualisation. [1]
L”interrogation des données historiques est prise en charge pour les tables Iceberg.
La prise en charge du clustering dépend du type de table Iceberg.
Type de table
Remarques
Tables qui utilisent Snowflake comme catalogue Iceberg
Définissez une clé de clustering via la commande CREATE ICEBERG TABLE ou ALTER ICEBERG TABLE. Pour définir ou gérer une clé de clustering, voir CREATE ICEBERG TABLE et ALTER ICEBERG TABLE.
Tables qui utilisent une intégration de catalogue
Le clustering n’est pas pris en charge.
Tables converties
Snowflake ne met les fichiers en cluster que s’ils ont été créés après la conversion de la table, ou si les fichiers ont été modifiés depuis à l’aide d’une instruction DML.
Accès par des clients tiers aux données et métadonnées Iceberg
Les clients tiers ne peuvent pas ajouter, supprimer ou appliquer d’opération upsert à des données dans les tables Iceberg qui utilisent Snowflake comme catalogue.