Tables Apache Iceberg™

Les tables Apache Iceberg™ pour Snowflake combinent les performances et la sémantique de requête des tables Snowflake typiques 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.

Les tables Iceberg utilisent 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

Snowflake prend en charge les tables Iceberg qui utilisent le format de fichier Apache Parquet™.

Prise en main

Pour commencer à utiliser des tables Iceberg, consultez Tutoriel : Créez votre première table Apache Iceberg™.

Fonctionnement

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 à l’aide d’un volume externe, et les tables Iceberg n’entraîenent aucun coût de stockage Snowflake. Pour plus d’informations, voir Facturation.

Pour en savoir plus sur le stockage des tables Iceberg, consultez Stockage pour les tables Apache Iceberg™.

Volume externe

Un volume externe est un objet Snowflake nommé, de niveau compte, que vous utilisez pour connecter Snowflake à votre stockage cloud externe pour les tables Iceberg. Un volume externe stocke une entité de gestion de l’identité et de l’accès (IAM) pour votre lieu de stockage. Snowflake utilise l’entité IAM pour se connecter en toute sécurité à votre stockage afin d’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.

Catalogue

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.

Intégration de catalogue

Une intégration de catalogue est un objet Snowflake de niveau compte qui stocke des informations sur la façon dont vos métadonnées de table sont organisées pour les scénarios suivants :

  • Lorsque vous n’utilisez pas Snowflake comme catalogue Iceberg. Par exemple, vous avez besoin d’une intégration de catalogue si votre table est gérée par AWS Glue.

  • Lorsque vous souhaitez une intégration à Snowflake Open Catalog pour :

    • Interroger une table Iceberg dans Snowflake Open Catalog à l’aide de Snowflake.

    • Synchroniser une table Iceberg gérée par Snowflake avec Snowflake Open Catalog afin que les moteurs de calcul tiers puissent interroger la table.

Une seule intégration de catalogue peut prendre en charge une ou plusieurs tables Iceberg qui utilisent le même catalogue externe.

Pour configurer l’intégration d’un catalogue, consultez Configuration d’une intégration de catalogue.

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.

Pour en savoir plus sur les métadonnées de table et la prise en charge de Time Travel, voir Métadonnées et conservation des tables 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 utilisant un catalogue externe avec 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 :

  • Vous ne pouvez pas utiliser la fonction SYSTEM$GET_ICEBERG_TABLE_INFORMATION pour obtenir des informations sur le dernier instantané actualisé.

  • Vous ne pouvez pas convertir la table pour utiliser Snowflake comme catalogue.

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 facture également votre compte si vous utilisez l”actualisation automatique.

Snowflake ne facture pas votre compte pour les coûts suivants :

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

Snowflake prend en charge les options de catalogue Iceberg suivantes :

Le tableau suivant résume les différences entre ces options de catalogue.

Utiliser Snowflake comme catalogue

Utiliser un catalogue externe

Accès en lecture

Accès en écriture

Pour une prise en charge de la plateforme Snowflake, 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 la plateforme Snowflake

S’intègre à Snowflake Open Catalog

Vous pouvez synchroniser une table gérée par Snowflake avec Open Catalog pour interroger une table à l’aide d’autres moteurs de calcul.

Vous pouvez utiliser Snowflake pour interroger les tables Iceberg gérées par Open Catalog.

Fonctionne avec le SDK du catalogue Snowflake

Utiliser Snowflake comme catalogue

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.

Fonctionnement des tables Iceberg qui utilisent Snowflake comme catalogue Iceberg

Utiliser un catalogue externe

Une table Iceberg qui utilise un catalogue externe offre une prise en charge de plateforme Snowflake limitée, avec un accès en lecture seule. Avec ce type de table, Snowflake utilise une intégration de catalogue pour récupérer des informations sur les métadonnées et le schéma Iceberg.

Vous pouvez utiliser cette option pour créer une table Iceberg pour les sources suivantes :

  • Catalogue de données AWS Glue

  • Fichiers de métadonnées Iceberg dans le stockage d’objets

  • Fichiers de tables Delta dans le stockage d’objets

  • Open Catalog

  • Catalogue REST Iceberg distant

Snowflake ne prend en charge aucune gestion du cycle de vie de la table.

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.

Le diagramme suivant montre comment une table Iceberg utilise une intégration de catalogue avec un catalogue Iceberg externe.

Fonctionnement des tables Iceberg qui utilisent une intégration de catalogue

Considérations et limites

Les considérations et limites suivantes s’appliquent aux tables Iceberg et sont susceptibles d’être modifiées :

Clouds et régions

  • Les tables Iceberg sont disponibles pour tous les comptes Snowflake, sur toutes les plateformes Cloud et dans toutes les régions, à l’exception de la région Chine.

  • Les tables inter-Cloud/interrégionales sont prises en charge lorsque vous utilisez un catalogue externe. Pour plus d’informations, voir Prise en charge inter-Cloud/interrégionale.

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é). Cependant, les tables qui utilisent Snowflake comme catalogue prennent en charge les instructions DELETE Snowflake.

    • 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.

  • Pour les tables Iceberg qui ne sont pas gérées par Snowflake, tenez compte des éléments suivants :

    • 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é.

    • La conversion d’une table dont la colonne de partition d’identité n’est pas matérialisée n’est pas prise en charge. Une colonne de partition d’identité non matérialisée est créée lorsqu’une table définit une transformation d’identité en utilisant une colonne source qui n’existe pas dans un fichier Parquet.

Formats de fichier

  • Les tables Iceberg prennent en charge les fichiers Apache Parquet.

  • Les fichiers Parquet qui utilisent le type logique d’entier non signé ne sont pas pris en charge.

Volumes externes

  • Vous ne pouvez pas accéder aux emplacements de stockage dans le cloud dans les volumes externes à l’aide d’une intégration de stockage.

  • Vous devez configurer une relation de confiance distincte 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).

  • Pour les tables qui utilisent un catalogue externe :

    • Assurez-vous que les fichiers manifestes ne contiennent pas de doublons. Si des fichiers en double sont présents dans le même instantané, Snowflake renvoie une erreur qui inclut le chemin du fichier en double.

    • Vous ne pouvez pas créer une table si les métadonnées Parquet contiennent des caractères UTF-8 non valides. Assurez-vous que vos métadonnées Parquet contiennent des caractères UTF-8 conformes.

  • Snowflake détecte les corruptions et les incohérences dans les métadonnées Parquet produites en dehors de Snowflake et signale les problèmes par des messages d’erreur.

    Il est possible de créer, d’actualiser ou d’interroger des tables gérées en externe (ou converties), même si les métadonnées de la table sont incohérentes. Lorsque vous écrivez des données Iceberg, assurez-vous que les statistiques de métadonnées de la table (par exemple, RowCount ou NullCount) correspondent au contenu des données.

  • Pour les tables qui utilisent Snowflake comme catalogue, Snowflake traite les instructions DDL individuellement et génère des métadonnées d’une manière qui peut différer des autres catalogues. Pour plus d’informations, voir Instructions DDL.

Clustering

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 CREATEICEBERGTABLE (Snowflake comme catalogue Iceberg) et ALTER ICEBERG TABLE.

Tables utilisant un catalogue externe

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.

Delta

  • Les flux Snowflake ne sont pas pris en charge pour les tables Iceberg créées à partir de fichiers de table Delta avec des colonnes de partition. Cependant, les flux d’insertion uniquement pour les tables créées à partir de fichiers Delta sans colonnes de partition sont pris en charge.

  • Les tables dynamiques ne sont pas prises en charge sur les tables Iceberg créées à partir de fichiers de table Delta.

  • Snowflake ne prend pas en charge la création de tables Iceberg à partir de définitions de table Delta dans le catalogue de données AWS Glue.

  • Les fichiers Parquet (fichiers de données pour les tables Delta) qui utilisent l’une des fonctionnalités ou l’un des types de données suivants ne sont pas pris en charge :

    • IDs de champ.

    • Le type de données est INTERVAL.

    • Le type de données DECIMAL avec une précision supérieure à 38.

    • Types LIST ou MAP avec représentation à un ou deux niveaux.

    • Types d’entiers non signés (INT(signé = faux)).

    • Le type de données est FLOAT16.

    Pour plus d’informations sur les types de données Delta et les tables Iceberg, voir Types de données Delta.

  • L’actualisation des opérations pendant CREATE et ALTER … REFRESH peut traiter un maximum de 1 000 fichiers de validation Delta par opération.

    Note

    Snowflake utilise des fichiers de point de contrôle Delta lors de la création d’une table Iceberg. La limite de 1 000 fichiers de validation s’applique uniquement aux validations effectuées après le dernier point de contrôle.

  • La génération de métadonnées Iceberg à l’aide de la fonction SYSTEM$GET_ICEBERG_TABLE_INFORMATION n’est pas prise en charge.

  • Les fonctionnalités suivantes de Delta Lake ne sont actuellement pas prises en charge : suivi des lignes, suppression de fichiers vectoriels, modification de fichiers de données, modification de métadonnées, DataChange, CDC, évolution du protocole.

Actualisation automatique

  • Lorsque l’actualisation automatique est activée, vous ne pouvez pas actualiser manuellement les métadonnées de la table. Pour effectuer une actualisation manuelle, commencez par désactiver l’actualisation automatique.

  • Pour les intégrations de catalogue créées avant la version 8.22 de Snowflake, vous devez définir manuellement le paramètre REFRESH_INTERVAL_SECONDS avant d’activer l’actualisation automatique sur les tables qui dépendent de cette intégration de catalogue. Pour obtenir des instructions, voir ALTER CATALOG INTEGRATION … SET AUTO_REFRESH.

  • Assurez-vous que le nouvel instantané de table est un enfant direct de l’instantané de table actuel. Dans le cas contraire, l’actualisation automatique est définie sur l’état STOPPED. Pour reprendre l’actualisation automatique lorsque cela se produit, voir Reprise en cas d’erreur.

  • L’actualisation automatique n’est pas prise en charge lorsque vous utilisez une intégration de catalogue pour le stockage d’objets.

  • Les manifestes Iceberg version 1 sans colonne de numéro de séquence ne sont actuellement pas pris en charge.

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.

Fonctionnalités non prises en charge

Les fonctionnalités Snowflake suivantes ne sont actuellement pas prises en charge pour toutes les tables Iceberg :

Les fonctionnalités suivantes ne sont pas prises en charge pour les tables Iceberg qui utilisent un catalogue externe :

  • Clonage

  • Clustering

  • Flux standard et flux d’ajout uniquement Les flux à insertion uniquement sont pris en charge.