Métadonnées et conservation des tables Apache Iceberg™

Snowflake gère les métadonnées des tables Apache Iceberg™ selon le type de catalogue que vous utilisez (Snowflake ou externe).

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

Snowflake gère le cycle de vie des métadonnées pour ce type de table et supprime les anciennes métadonnées, les listes de manifestes et les fichiers de manifeste en fonction de la période de conservation des données de table et des instantanés.

Pour définir la période de conservation des données de table et des instantanés, définissez le paramètre DATA_RETENTION_TIME_IN_DAYS au niveau du compte, de la base de données, du schéma ou de la table.

Création

Snowflake génère périodiquement des métadonnées pour la version 2 de la spécification Apache Iceberg et les écrit dans des fichiers sur votre volume externe. Chaque nouveau fichier de métadonnées contient l’ensemble des modifications DML ou DDL depuis la création du dernier fichier de métadonnées généré par Snowflake.

Vous pouvez également créer des métadonnées à la demande à l’aide de la fonction SYSTEM$GET_ICEBERG_TABLE_INFORMATION. Pour obtenir des instructions, voir Générer des instantanés des modifications DML.

Pour plus d’informations sur la localisation des fichiers de métadonnées, voir Répertoires de données et de métadonnées.

Affichage de l’historique de création des métadonnées

Pour accéder à un historique complet des tentatives de génération de métadonnées, affichez l’historique des requêtes de votre compte et filtrez les résultats. Recherchez le nom de la fonction SYSTEM$GET_ICEBERG_TABLE_INFORMATION dans le texte SQL.

Snowflake utilise en interne la même fonction SYSTEM$GET_ICEBERG_TABLE_INFORMATION pour générer des métadonnées de table. Les tentatives effectuées par Snowflake apparaissent sous l’utilisateur appelé SYSTEM dans l’historique des requêtes. La colonne STATUS de l’historique des requêtes indique si les métadonnées ont été générées avec succès.

Pour les options d’affichage, voir Surveillance de l’activité des requêtes avec l’historique des requêtes.

Suppression

Snowflake supprime les métadonnées Iceberg de votre stockage Cloud externe lorsque les événements suivants se produisent :

  • Après la suppression d’une table.

  • Lorsque les métadonnées Iceberg font référence à des instantanés ou à des données de table qui ont expiré.

La suppression n’a pas lieu immédiatement après l’expiration de la période de conservation des données. Par conséquent, le stockage des métadonnées pourrait entraîner des coûts auprès de votre fournisseur de stockage cloud pour une durée plus longue que la durée de vie d’une table.

Avertissement

Snowflake ne prend pas en charge Fail-safe pour les tables Iceberg gérées par Snowflake, 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.

Après la suppression d’une table

Lorsque vous supprimez une table, vous pouvez utiliser la commande UNDROP ICEBERG TABLE pour la restaurer dans la période de conservation des données.

À l’expiration de la période de conservation, Snowflake supprime de l’emplacement de votre volume externe les métadonnées et les instantanés de table qu’il a écrits. La suppression se produit de manière asynchrone et peut prendre quelques jours après l’expiration de la période de conservation.

Note

Pour les tables converties, Snowflake supprime uniquement les métadonnées générées après la conversion de la table.

Après l’expiration des instantanés

Snowflake supprime les fichiers de métadonnées Iceberg liés aux instantanés expirés une fois la période de conservation des données écoulée. La suppression se produit généralement 7 à 14 jours après l’expiration d’un instantané.

Seuls les instantanés de table précédents peuvent expirer. Snowflake ne supprime jamais les fichiers de métadonnées qui représentent l’état le plus récent (actuel) d’une table de votre stockage Cloud externe.

Tables utilisant un catalogue externe

Pour les tables qui utilisent un catalogue externe, Snowflake utilise la valeur du paramètre 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.

Snowflake définit DATA_RETENTION_TIME_IN_DAYS au niveau de la table sur la valeur la plus petite parmi les suivantes :

  • La valeur de history.expire.max-snapshot-age-ms dans le fichier de métadonnées actuel. Snowflake convertit la valeur en jours (en arrondissant à l’unité inférieure).

  • La valeur suivante, en fonction de l’édition du compte Snowflake :

    • Standard Edition : 1 jour.

    • Enterprise Edition ou une édition supérieure : 5 jours

Vous ne pouvez pas modifier manuellement la valeur de DATA_RETENTION_TIME_IN_DAYS dans Snowflake. Pour modifier la valeur, vous devez mettre à jour history.expire.max-snapshot-age-ms dans votre fichier de métadonnées, puis actualiser la table.

Vous pouvez utiliser les fonctions de table suivantes pour récupérer des informations sur les fichiers enregistrés dans une table Iceberg gérée en externe ou sur l’historique de rafraîchissement du cliché le plus récent :

Tables basées sur Delta

Note

Si vous souhaitez utiliser les écritures de métadonnées pour les tables Iceberg basées sur le Delta, le bundle de changements de comportement 2025_01 ne doit pas être désactivé dans votre compte.

Pour les tables Iceberg créées à partir des fichiers de table Delta, Snowflake écrit automatiquement les métadonnées Iceberg sur votre stockage externe si vous configurez votre volume externe avec un accès en écriture (voir ALLOW_WRITES). Pour plus d’informations sur l’emplacement d’écriture, voir Répertoires de données et de métadonnées.

Pour empêcher Snowflake d’écrire des métadonnées Iceberg, vous pouvez donner au paramètre ALLOW_WRITES la valeur FALSE sur votre volume externe tant qu’aucune table Iceberg gérée par Snowflake n’utilise le même volume externe.

Partitionnement Iceberg

Le partitionnement « masqué » pour Apache Iceberg™ est basé sur des métadonnées et adaptable. Iceberg produit des valeurs de partition basées sur les transformations que vous définissez lorsque vous créez une table. Lorsqu’ils lisent à partir d’une table partitionnée, les moteurs Iceberg utilisent les valeurs de partition définies dans les métadonnées de votre table pour identifier efficacement les données pertinentes.

Snowflake prend en charge les cas d’utilisation de partitionnement suivants :

Pour créer une table Iceberg partitionnée, incluez la clause PARTITION BY avec une ou plusieurs transformations de partition dans votre instruction CREATE ICEBERG TABLE régulière. Pour un exemple, voir Créer une table Iceberg dans une base de données liée à un catalogue.

Matrice de prise en charge du partitionnement

Le tableau suivant montre les fonctionnalités et actions prises en charge pour chaque type de table Iceberg partitionnée et indique la conformité à la version 2 de la spécification Apache Iceberg.

Note

  • La version 3 de la spécification Apache Iceberg n’est pas prise en charge lors de l’utilisation du partitionnement.

  • CLD désigne une base de données liée à un catalogue.

Géré par Snowflake

Géré en externe (CLD)

Géré en externe (non-CLD)

Compatibilité avec la spécification Iceberg v2

Commentaire

Commandes COPY avec option ON_ERROR = ABORT_STATEMENT

COPY INTO <table>

Prise en charge limitée

Prise en charge limitée

Prise en charge limitée

Prise en charge limitée

Voir Notes sur l’utilisation.

CREATE ICEBERG TABLE … AS SELECT (CTAS)

Clonage

Voir les notes sur l’utilisation :

CREATE ICEBERG TABLE … LIKE

Voir les notes sur l’utilisation :

Vecteurs de suppression

N/A

Clustering

TARGET_FILE_SIZE

Les partitions sont écrites dans un fichier de 16 MB.

Évolution des partitions

Prise en charge limitée

Prise en charge limitée

Prise en charge limitée

Nous prenons en charge l’évolution des partitions si elle est effectuée avec un moteur externe.

Transformations des partitions

Pour les transformations de partitions prises en charge, consultez :

Suppressions positionnelles

N/A

Snowpipe

Snowpipe Streaming

Tri dans les partitions

Remarques relatives au partitionnement

Tenez compte des points suivants avant d’utiliser des écritures partitionnées pour les tables Iceberg :

  • Si vous utilisez un moteur externe pour ajouter, détruire ou remplacer un champ de partition dans une table gérée en externe, Snowflake écrit les données conformément à la dernière spécification de partition.

  • Snowflake utilise un fichier cible de 16 MB pour les tables partitionnées. Si la taille du fichier par défaut est plus importante, Snowflake réduit automatiquement la taille cible à 16 MB lorsque vous écrivez dans une table partitionnée.

  • La fonction GET_DDL n’inclut pas la clause PARTITION BY dans sa sortie.

  • La somme des tailles des sorties pour toutes les transformations de partitions ne peut pas dépasser 1 024 octets pour une seule ligne.

  • Étant donné que l’évolution des partitions n’est pas prise en charge pour les tables gérées par Snowflake, vous devez supprimer la table et en créer une nouvelle avec le partitionnement.

  • Les paramètres de transformation des partitions DAY(), MONTH() et YEAR, que vous spécifiez dans la clause PARTITION BY sous les propriétés de la table, font partie de la spécification Iceberg. Pendant plusieurs jours, mois ou années, le paramètre d’expression de partition renvoie une partition pour chaque jour, mois ou année calendaire. Par exemple, lorsque la transformation DAY() est utilisée sur une colonne d’horodatage qui possède 2 mois de données, 61 partitions sont créées.

    En revanche, les fonctions DAY(), MONTH() et YEAR dans Snowflake font partie du SQL standard. Pendant plusieurs jours, mois ou années, ces fonctions extraient la partie correspondante du jour, du mois ou de l’année à partir d’une date ou d’un horodatage. Par exemple, lorsque la fonction DAY() est utilisée sur une colonne d’horodatage qui possède plusieurs mois de données, cette fonction renvoie un jour du mois allant de 1 à 31.

Time Travel

Avec Snowflake Time Travel, vous pouvez utiliser Snowflake pour interroger les données historiques d’une table.

Vous pouvez également utiliser un moteur de calcul tiers pour effectuer des requêtes Time Travel sur les tables gérées par Snowflake lorsque vous Synchronisation d’une table gérée par Snowflake avec Snowflake Open Catalog ou utilisez le SDK du catalogue Snowflake.

Vous pouvez interroger tous les instantanés qui ont été validés pendant la période de conservation des données. Pour spécifier la période de conservation des données, définissez le paramètre d’objet DATA_RETENTION_TIME_IN_DAYS.

Lorsque vous supprimez des données de table ou une table, Snowflake supprime les objets après l’expiration de la période de conservation des données de la table. Cela pourrait entraîner des coûts auprès de votre fournisseur de stockage cloud pour une durée plus longue que la durée de vie de la table.