Stockage Snowflake pour les tables Apache Iceberg™¶
Snowflake prend en charge le stockage Snowflake pour les tables Apache Iceberg™.
Tout comme les tables Snowflake standard, cette fonctionnalité vous permet de créer des tables Iceberg gérées par Snowflake dans Snowflake Avec cette option, Snowflake stocke et gère les fichiers de tables Iceberg pour vous en utilisant le stockage Snowflake (interne), de sorte que vous n’avez pas besoin de configurer l’accès au stockage Cloud externe.
Cette fonctionnalité fonctionne avec le Catalogue Snowflake Horizon, pour que vous puissiez utiliser un moteur de requête externe pour vous connecter à une table Iceberg qui utilise le stockage Snowflake. Pour plus d’informations, voir Accéder aux tables Apache Iceberg™ avec un moteur externe via Snowflake Horizon Catalog. En outre, vous pouvez interroger ces mêmes tables dans Snowflake.
Note
Cette fonctionnalité n’est actuellement disponible que pour les comptes hébergés sur Amazon Web Services (AWS) ou Azure. Cette fonctionnalité n’est pas disponible dans les régions gouvernementales ni en République populaire de Chine.
Comment fonctionne le stockage Snowflake¶
Lorsque vous créez une table Iceberg avec un stockage Snowflake, Snowflake gère tous les fichiers de données et de métadonnées en interne. Vous n’avez pas besoin de configurer un volume externe ou d’accorder à Snowflake l’accès à votre stockage Cloud.
Créer une table Iceberg avec un stockage Snowflake¶
Table TRANSIENT explicite avec stockage géré par Snowflake :
CATALOGdoit êtreSNOWFLAKEpour ce modèle de stockage. Si le catalogue par défaut de votre compte est Snowflake, vous pouvez omettreCATALOG.EXTERNAL_VOLUMEdoit être:code:SNOWFLAKE_MANAGEDlorsque vous utilisez le stockage Snowflake. Si votre volume externe par défaut estSNOWFLAKE_MANAGED, vous pouvez omettre:code:EXTERNAL_VOLUME.
Le volume externe SNOWFLAKE_MANAGED ¶
EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED' sélectionne le stockage fourni par Snowflake pour la table.:code:SNOWFLAKE_MANAGED est une valeur réservée, pas un objet de volume externe créé par l’utilisateur. Vous n’exécutez pas CREATE EXTERNAL VOLUME pour ce chemin.
Pour les tables Iceberg qui stockent les fichiers dans votre stockage Cloud, vous créez un volume externe, accordez:code:USAGE et définissez EXTERNAL_VOLUME sur le nom de ce volume. Pour obtenir des instructions, voir Configurer un volume externe.
Tables permanentes et transitoires¶
Les tables Iceberg qui utilisent le stockage Snowflake peuvent être permanentes ou transitoires :
Permanente (par défaut) : Les données des tables sont protégées par :doc:` Fail-safe</user-guide/data-failsafe>`, la même fonctionnalité de récupération des données sur 7 jours que Snowflake fournit pour les tables standards.
Transitoire : Les données de table ne sont pas protégées par Fail-safe. Le comportement du stockage et du Time Travel est identique à celui des :ref:` tables transitoires<label-table_type_transient>` dans Snowflake. Les tables transitoires n’entraînent pas de coûts de stockage Fail-safe.
Utilisez le mot-clé TRANSIENT dans l’instruction CREATEICEBERGTABLE pour créer une table Iceberg transitoire.
Note
Les tables Iceberg transitoires ne sont prises en charge qu’avec le stockage Snowflake. Vous ne pouvez pas créer une table Iceberg transitoire qui utilise un volume externe géré par le client.
Astuce
Pour vérifier si une table Iceberg existante est permanente ou transitoire, exécutez SHOWTABLES et examinez la colonne kind. La valeur est``TRANSIENT`` pour les tables transitoires et``TABLE`` pour les tables permanentes.
Catalogue par défaut et volume externe¶
Si vous omettez CATALOG et:code:EXTERNAL_VOLUME sur l’instruction, Snowflake les résout à partir du schéma, de la base de données et du compte par défaut (le schéma remplace la base de données, la base de données remplace le compte). Lorsque le catalogue effectif est Snowflake (CATALOG = 'SNOWFLAKE'), le volume externe par défaut est:code:SNOWFLAKE_MANAGED à moins qu’un autre par défaut soit défini à un niveau inférieur. Pour plus d’informations, voir Définition d’un catalogue par défaut au niveau du compte, de la base de données ou du schéma et Définition d’un volume externe par défaut au niveau du compte, de la base de données ou du schéma.
Lorsque vous définissez CATALOG = 'SNOWFLAKE' explicitement, le volume externe par défaut est SNOWFLAKE_MANAGED à moins que vous ne le remplaciez par EXTERNAL_VOLUME ou un schéma, une base de données ou un compte par défaut qui nomme un autre volume.
Réplication¶
Vous pouvez répliquer les tables Iceberg qui utilisent le stockage Snowflake en utilisant un groupe de basculement ou de réplication. Pour activer la réplication pour ces tables, vous devez d’abord activer la réplication pour les tables Iceberg gérées par Snowflake en suivant les étapes dans Configurer la réplication pour les tables Apache Iceberg™ gérées par Snowflake.
Contrairement aux tables Iceberg standard gérées par Snowflake, vous n’avez pas besoin d’inclure EXTERNAL VOLUMES dans la liste OBJECT_TYPES de votre groupe de basculement ou de réplication. Snowflake gère automatiquement le stockage des tables répliquées qui utilisent le volume externe SNOWFLAKE_MANAGED.
Par exemple, créez un groupe de basculement qui réplique une base de données contenant des tables Iceberg qui utilisent le stockage Snowflake :
Considérations relatives à la réplication¶
La réplication vers des comptes hébergés sur Google Cloud Platform (GCP ) n’est pas prise en charge. Snowflake ignore les tables Iceberg qui utilisent le stockage Snowflake lors des opérations d’actualisation lorsque le compte cible est hébergé sur GCP.
Si vous avez créé des tables Iceberg pendant l’avant-première privée en utilisant un volume externe autre que
SNOWFLAKE_MANAGED, Snowflake migre automatiquement la table répliquée sur le compte secondaire pour utiliser le volumeSNOWFLAKE_MANAGED. Notez les points suivants à propos de cette migration :Si vous incluez
EXTERNAL VOLUMESdans la listeOBJECT_TYPESdu groupe de basculement ou de réplication, le volume externe en avant-première privée est répliqué sur le compte secondaire, mais il n’est pas joint à la table. Toutes les utilisations du volume externe en avant-première privée sur le compte secondaire sont bloquées.Snowflake vous recommande de supprimer toutes les tables Iceberg qui utilisent un volume externe d’avant première privée et de les recréer en utilisant
EXTERNAL_VOLUME = SNOWFLAKE_MANAGEDavant d’activer la réplication.
Facturation¶
Snowflake facture votre compte pour l’utilisation suivante :
Coût de stockage¶
Snowflake facture chaque octet stocké dans Snowflake.
Snowflake regroupe l’utilisation du stockage pour les tables Iceberg qui utilisent le stockage Snowflake dans la colonne
STORAGE_BYTESde:doc:/sql-reference/account-usage/storage_usage, ainsi que l’utilisation du stockage pour les tables hors Iceberg. Seuls les fichiers qui sont validés dans le catalogue sont inclus dansSTORAGE_BYTES. Snowflake ne facture pas les validations abandonnées.Le coût de cette utilisation du stockage est décrit dans la table 3(a) du tableau de consommation du service Snowflake sur le site Web de Snowflake.
Coût de la requête¶
Note
Chaque fois que vous utilisez un moteur de requête via Horizon Catalog pour accéder aux tables Iceberg qui sont stockées dans Snowflake, le moteur de requête est considéré comme un moteur de requête externe. Lorsque vous utilisez un moteur de requête externe pour accéder à ces tables, Snowflake facture votre compte pour cet accès.
La liste suivante décrit certains cas où des moteurs de requête externes accèdent à des tables Iceberg stockées dans Snowflake :
Les moteurs Snowflake qui accèdent aux tables via Horizon Catalog à partir d’un autre compte Snowflake. Par exemple, si une table est gérée par un compte Snowflake A mais que vous accédez à la table depuis le moteur Snowflake dans le compte B via Horizon Catalog, cet accès vous est facturé. Cet accès vous est facturé car le moteur Snowflake du compte B est un moteur de requête externe.
Des moteurs de requête tiers que vous déployez dans le réseau Snowflake en utilisant les services de conteneur Snowflake. Lorsque vous utilisez ces moteurs via Horizon Catalog pour accéder aux tables, les moteurs sont externes et leurs requêtes sont facturées de la même manière que les autres moteurs de requête tiers.
Moteurs de requêtes tiers que vous déployez en dehors de Snowflake que vous utilisez pour vous connecter aux tables via Horizon Catalog.
Snowflake ne facture pas votre compte lorsque vous utilisez le moteur de requête Snowflake pour accéder directement à ces tables Iceberg, ce qui signifie que vous n’y accédez pas via Horizon Catalog. Par exemple, si une table est gérée par le compte A et que vous utilisez le moteur Snowflake du compte A pour accéder à une table, cet accès ne vous est pas facturé.
Lorsque vous utilisez un moteur de requête externe via Snowflake Horizon Catalog pour accéder aux tables Iceberg qui utilisent le stockage Snowflake, Snowflake facture à votre compte des frais par requête pour chaque requête HTTP envoyée au système de stockage sous-jacent. Le taux dépend du type de requête :
Opérations PUT, COPY, POST, PATCH etLIST, qui sont facturées comme étant de type « classe 1 ».
Opérations GET et SELECT, qui sont facturées comme étant de type « classe 2 ».
Pour afficher le nombre de requêtes pour ces types d’opérations, utilisez la vue d’utilisation du compte STORAGE_REQUEST_HISTORY. Cette utilisation est facturée sous les SKUs
STORAGE_REQUEST-1etSTORAGE_REQUEST-2sur le relevé de facturation.Ce taux est décrit dans le tableau 3(g) du tableau de consommation du service Snowflake.
Coûts du transfert des données¶
Lorsque vous utilisez un moteur de requête externe via Horizon Catalog pour accéder à une table à partir d’une autre région ou avec un autre fournisseur de Cloud, des frais de transfert de données standard sont facturés par octet.
Ces frais de transfert de données sont décrits dans les tableaux 4(a), 4(b) et 4(c) du `tableau de consommation du service Snowflake<https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf>`_.
Pour plus d’informations, voir Comprendre le coût de transfert de données.
Connectivité privée¶
Lorsque vous utilisez un moteur de requête externe pour accéder aux tables Iceberg qui utilisent le stockage Snowflake, vous pouvez configurer la connectivité privée afin que le trafic ne passe pas par l’Internet public.
Pour les instructions de configuration, voir Aux volumes de stockage gérés par Snowflake.
Considérations et limites¶
Tenez compte de ce qui suit lorsque vous travaillez avec des tables Iceberg qui utilisent le stockage Snowflake :
Prise en charge des fournisseurs Cloud¶
Cette fonctionnalité n’est actuellement disponible que pour les comptes hébergés sur Amazon Web Services (AWS) ou Microsoft Azure. Cette fonctionnalité n’est pas disponible dans les régions gouvernementales ni en République populaire de Chine.
Chiffrement¶
Les tables Iceberg qui utilisent le stockage Snowflake ne prennent en charge que le chiffrement côté serveur (SSE). Les clés gérées par le client (CMK) ne sont pas prises en charge, même si Tri-Secret Secure est activé sur votre compte.
Comportement de clonage¶
Avertissement
La table Iceberg que vous créez utilise des identifiants de connexion distribués par catalogue. Lorsque vous clonez une table Iceberg qui utilise des identifiants de connexion distribués par catalogue, la table clonée partage le même emplacement de base que la table source. Les mêmes identifiants de connexion peuvent être utilisés pour accéder à l’emplacement de base partagé, de sorte que la table clonée ait un accès en écriture à la table source.
Pour les tables qui utilisent un stockage géré par Snowflake (EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED' ),:code:CREATE ICEBERG TABLE ... CLONE réussit uniquement lorsque la table source et la nouvelle table sont toutes les deux transitoires ou toutes les deux permanentes. Si l’une est transitoire et l’autre permanente, l’instruction échoue.
Table source |
Cloner |
Résultat |
|---|---|---|
Transitoire |
Transitoire |
Pris en charge |
Permanent |
Permanent |
Pris en charge |
Transitoire |
Permanent |
Non pris en charge |
Permanent |
Transitoire |
Non pris en charge |
Pour la syntaxe de la commande et d’autres comportements de clonage, voir CREATE ICEBERG TABLE … CLONE dans CREATEICEBERGTABLE (Snowflake comme catalogue Iceberg) et Clonage et tables Apache Iceberg™.
Ingestion des données¶
Vous pouvez ingérer des données dans des tables Iceberg qui utilisent le stockage Snowflake en utilisant les méthodes suivantes :
Snowpipe : Utilisez :doc:` Snowpipe</user-guide/data-load-snowpipe-intro>` pour charger des données à partir de fichiers dans le stockage Cloud en utilisant COPYINTO. Snowpipe fonctionne avec les tables Iceberg permanentes et transitoires.
Snowpipe Streaming : Utilisez Snowpipe Streaming hautes performances pour ingérer des données en continu. Snowpipe Streaming fonctionne avec les tables Iceberg permanentes et transitoires.