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 :
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 :
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, les vues INFORMATION_SCHEMA.TABLE_STORAGE_METRICS et ACCOUNT_USAGE.TABLE_STORAGE_METRICS affichent ACTIVE_BYTES pour les tables Iceberg afin de vous aider à déterminer la quantité d’espace de stockage occupée par une table. Pour voir un exemple, consultez Récupération des métriques de stockage.
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 :
Utiliser Snowflake comme catalogue Iceberg
Utiliser un catalogue Iceberg externe
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 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.
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.
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
ouNullCount
) 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.
Si votre table est vide, effectuez une actualisation manuelle avant d’activer l’actualisation automatique pour éviter un comportement indéfini.
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 pilotes suivants :
Annonces qui permettent l”Exécution automatique inter-Cloud.
Réplication de tables Iceberg, de volumes externes ou d’intégrations de catalogue
Chiffrement Snowflake
Snowflake Connector for Kafka Connector avec Snowpipe Streaming
Snowflake Ingest SDK
Snowpipe Streaming API
Balisage à l’aide de la ASSOCIATE_SEMANTIC_CATEGORY_TAGS procédure stockée
Les fonctionnalités suivantes ne sont pas prises en charge pour les tables Iceberg qui utilisent un catalogue externe :
Flux standard et flux d’ajout uniquement Les flux à insertion uniquement sont pris en charge.