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éer 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¶
Snowflake prend en charge l’utilisation d’un emplacement de stockage de volume externe auprès d’un fournisseur Cloud différent (dans une région différente) de celui qui héberge votre compte Snowflake.
Type de table |
Prise en charge inter-Cloud/interrégionale |
Remarques |
---|---|---|
Tables utilisant un catalogue externe avec une intégration de 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 |
✔ |
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. Ces tables entraînent des coûts pour l’utilisation du transfert de données entre régions. Pour plus d’informations, voir Facturation. |
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.
Si une table Iceberg gérée par Snowflake est inter-Cloud/interrégionale , Snowflake facture votre utilisation de transfert de données entre régions sous le TRANSFER_TYPE DATA_LAKE. Pour en savoir plus, voir :
Vue DATA_TRANSFER_HISTORY dans le schéma ORGANIZATION_USAGE.
Vue DATA_TRANSFER_HISTORY dans le schéma ACCOUNT_USAGE.
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. |
Accès en écriture entre régions |
✔ |
❌ |
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 (table Iceberg gérée par Snowflake) offre un support complet de la plateforme Snowflake 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.
Note
Si vous souhaitez une prise en charge complète de la plateforme Snowflake pour une table Iceberg qui utilise un catalogue externe, vous pouvez convertir cette table pour qu’elle utilise Snowflake comme catalogue. Pour plus d’informations, voir Conversion d’une table Apache Iceberg™ pour utiliser Snowflake comme catalogue.
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.
Les tables inter-Cloud/interrégionales sont prises en charge. 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 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.
Pour les suppressions de niveau ligne :
Snowflake ne prend en charge que les suppressions par position.
Pour obtenir les meilleures performances de lecture lorsque vous utilisez des suppressions de niveau ligne, procédez régulièrement au compactage et à la maintenance des tables afin de supprimer les anciens fichiers de suppression. Pour plus d’informations, voir Gestion des tables utilisant un catalogue externe.
Les fonctions suivantes ne sont actuellement pas prises en charge lorsque vous utilisez des suppressions de niveau ligne :
Actualisation automatique
Création de vues matérialisées, d’optimisations de recherche ou de flux sur des tables dynamiques, des tables Iceberg dynamiques ou des tables Iceberg avec des suppressions par position existantes.
Tables dynamiques
Actualisation de l’instantané Iceberg avec suppressions par position sur des tables dynamiques, des tables Iceberg dynamiques ou des tables Iceberg comportant des vues matérialisées, des optimisations de recherche ou des flux actifs ou supprimés.
Optimisation de la recherche
Flux
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.
Pour les fichiers Parquet qui utilisent le type logique
LIST
, tenez compte des points suivants :
La structure d’annotation à trois niveaux avec le mot-clé
element
est prise en charge. Pour plus d’informations, consultez Définitions de types logiques Parquet. Si votre fichier Parquet utilise un format obsolète avec le mot-cléarray
, vous devez régénérer vos données en vous basant sur le format 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.
Vous pouvez utiliser la connectivité privée sortante pour accéder aux tables Iceberg gérées par Snowflake et aux tables Iceberg qui utilisent une intégration de catalogue pour le stockage d’objets, mais vous ne pouvez pas l’utiliser pour accéder aux tables Iceberg qui utilisent d’autres intégrations de catalogue.
Une fois que vous avez créé une table gérée par Snowflake, le chemin d’accès à ses fichiers dans le stockage externe ne change plus, même si vous renommez la table.
Snowflake ne peut pas prendre en charge les volumes externes dont les noms de compartiment S3 contiennent des points (par exemple,
my.s3.bucket
). S3 ne prend pas en charge le SSL pour les compartiments de type hôte virtuel avec des points dans le nom, et Snowflake utilise des chemins de type hôte virtuel et HTTPS pour accéder aux données dans S3.
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
Snowflake prend en charge la version 2 du lecteur Delta et peut lire toutes les tables écrites par des moteurs utilisant la version 2.2.0 de Delta Lake.
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.
Vous pouvez utiliser le type physique Parquet
int96
pour TIMESTAMP, mais Snowflake ne prend pas en chargeint96
pour TIMESTAMP_NTZ.
Pour plus d’informations sur les types de données Delta et les tables Iceberg, voir Types de données Delta.
Snowflake traite un maximum de 1 000 fichiers de validation Delta chaque fois que vous rafraîchissez une table en utilisant CREATE/ALTER. .. REFRESH. Si votre table contient plus de 1 000 fichiers de validation, vous pouvez procéder à des actualisations manuelles supplémentaires. À chaque fois, le processus d’actualisation reprend là où le précédent s’est arrêté.
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.
Lorsque vous actualisez une table existante, Snowflake traite les fichiers de validation Delta, mais pas les fichiers de points de contrôle. Si la maintenance des tables supprime les fichiers journaux et les fichiers de données périmés pour la table Delta source, vous devez actualiser les tables Iceberg basées sur Delta dans Snowflake plus fréquemment que la période de conservation des fichiers journaux et des fichiers de données Delta.
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 catalogues créées avant la version 8.22 de Snowflake (ou 9.2 pour les tables basées sur Delta), 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.Si votre table est vide, insérez des données dans celle-ci, puis effectuez une actualisation manuelle dans Snowflake avant d’activer l’actualisation automatique pour éviter un comportement indéfini.
Pour les intégrations au catalogue pour le stockage d’objets, l’actualisation automatique n’est prise en charge que pour les intégrations avec
TABLE_FORMAT = DELTA
.Pour les tables recevant fréquemment des mises à jour, l’utilisation d’un intervalle d’interrogation plus court (
REFRESH_INTERVAL_SECONDS
) peut entraîner une dégradation des performances.
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 :
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
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.