Gestion des tables Apache Iceberg™¶
Gestion des Tables Apache Iceberg™ dans Snowflake :
Vous pouvez également convertir une table Iceberg qui utilise un catalogue externe en une table qui utilise Snowflake comme catalogue Iceberg. Pour en savoir plus, voir Conversion d’une table Apache Iceberg™ pour utiliser Snowflake comme catalogue.
Interroger une table¶
Pour interroger une table Iceberg, un utilisateur doit se voir accorder les privilèges suivants ou en hériter :
Le privilège USAGE sur la base de données et le schéma qui contiennent la table
Le privilège SELECT sur la table
Vous pouvez interroger une table Iceberg à l’aide d’une instruction SELECT. Par exemple :
SELECT col1, col2 FROM my_iceberg_table;
Utiliser les commandes DML¶
Les tables Iceberg qui utilisent Snowflake comme catalogue prennent intégralement en charge Commandes DML (Langage de manipulation de données), y compris ce qui suit :
Les tables gérées par Snowflake prennent également en charge un chargement en masse efficace grâce à des fonctions telles que COPY INTO <table> et Snowpipe. Pour plus d’informations, voir Charger des données dans les tables Apache Iceberg™.
Note
Snowflake also supports writing to externally managed Iceberg tables. For more information, see Prise en charge de l’écriture des tables Apache Iceberg™ gérées en externe and Écriture dans des tables Iceberg gérées en externe.
Pour les tables Iceberg gérées par Snowflake, si une opération DML échoue de manière inattendue et s’annule, certains fichiers Parquet peuvent être écrits dans votre stockage Cloud externe, mais ils ne seront pas suivis ou référencés par les métadonnées de vos tables Iceberg. Ces fichiers Parquet sont des fichiers orphelins.
Si vous constatez un décalage entre l’utilisation du stockage de votre stockage Cloud externe et celle de Snowflake, il se peut que vous ayez des fichiers orphelins dans votre stockage Cloud externe. Pour voir votre utilisation du stockage pour Snowflake, vous pouvez utiliser les Vue TABLE_STORAGE_METRICS ou les Vue TABLE_STORAGE_METRICS. Si vous constatez un décalage, contactez le Support Snowflake pour obtenir de l’aide pour déterminer si vous avez des fichiers orphelins et les supprimer.
Exemple : Mettre à jour une table¶
Vous pouvez utiliser les instructions INSERT et UPDATE pour modifier les tables Iceberg gérées par Snowflake.
L’exemple suivant insère une nouvelle valeur dans une table Iceberg nommée store_sales, puis met à jour la colonne cola sur 1 si la valeur est actuellement -99.
INSERT INTO store_sales VALUES (-99);
UPDATE store_sales
SET cola = 1
WHERE cola = -99;
Générer des instantanés des modifications DML¶
Pour les tables qui utilisent Snowflake comme catalogue, Snowflake génère automatiquement les métadonnées Iceberg. Snowflake écrit les métadonnées dans un dossier nommé metadata dans votre volume externe. Pour trouver le dossier metadata, voir Répertoires de données et de métadonnées.
Vous pouvez également appeler la fonction SYSTEM$GET_ICEBERG_TABLE_INFORMATION pour générer des métadonnées Iceberg pour toute nouvelle modification.
Pour des tables non gérées par Snowflake, la fonction renvoie des informations sur le dernier instantané actualisé.
Par exemple :
SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
Sortie :
+-----------------------------------------------------------------------------------------------------------+
| SYSTEM$GET_ICEBERG_TABLE_INFORMATION('DB1.SCHEMA1.IT1') |
|-----------------------------------------------------------------------------------------------------------|
| {"metadataLocation":"s3://mybucket/metadata/v1.metadata.json","status":"success"} |
+-----------------------------------------------------------------------------------------------------------+
Utiliser les suppressions de niveau ligne¶
Note
Pris en charge uniquement pour les tables Iceberg gérées en externe.
Snowflake prend en charge l’interrogation de tables avec des suppressions au niveau des lignes, ainsi que l’écriture dans des tables en utilisant les suppressions au niveau des lignes.
Interroger des tables¶
Snowflake prend en charge l’interrogation de tables Iceberg gérées en externe lorsque vous avez configuré les suppressions au niveau de la ligne pour les opérations de mise à jour, de suppression et de fusion.
Pour configurer les suppressions de niveau ligne, voir les propriétés d’écriture dans la documentation d’Apache Iceberg.
Écrire dans des tables¶
Snowflake prend en charge les suppressions de position au niveau des lignes pour l’écriture dans des tables Iceberg gérées en externe et stockées sur Amazon S3, Azure ou Google Cloud. Pour désactiver les suppressions de position, qui permettent l’exécution des opérations DML en mode copie sur écriture, définissez le paramètre ENABLE_ICEBERG_MERGE_ON_READ sur FALSE au niveau de la table, du schéma ou de la base de données.
Copie sur écriture ou fusion sur lecture¶
Iceberg propose deux modes de configuration de la manière dont les moteurs de calcul gèrent les opérations de niveau ligne pour les tables gérées en externe. Snowflake prend en charge ces deux modes.
Le tableau suivant décrit les cas dans lesquels vous pourriez avoir besoin d’utiliser l’un ou l’autre mode :
Mode |
Description |
|---|---|
Copie sur écriture (par défaut) |
Ce mode donne la priorité au temps de lecture et affecte la vitesse d’écriture. Lorsque vous effectuez une opération de mise à jour, de suppression ou de fusion, votre moteur de calcul réécrit l’intégralité du fichier de données Parquet concerné. Cela peut ralentir les écritures, surtout si vous avez des fichiers de données volumineux, mais n’a pas d’impact sur le temps de lecture. Il s’agit du mode par défaut. |
Fusion sur lecture |
Ce mode donne la priorité à la vitesse d’écriture et affecte légèrement le temps de lecture. Lorsque vous effectuez une opération de mise à jour, de suppression ou de fusion, votre moteur de calcul crée un fichier de suppressions qui ne contient des informations que sur les lignes modifiées. Lorsque vous lisez les données d’une table, votre moteur de requête fusionne les fichiers de suppressions avec les fichiers de données. La fusion peut augmenter le temps de lecture. Toutefois, vous pouvez optimiser les performances de lecture en planifiant des opérations régulières de compactage et de maintenance des tables. |
Pour plus d’informations sur les modifications de niveau ligne pour Iceberg, voir Suppressions de niveau ligne dans la documentation d’Apache Iceberg.
Considérations et limites¶
Tenez compte des points suivants lorsque vous utilisez des suppressions de niveau ligne avec des tables Iceberg gérées en externe :
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.
Des suppressions de position excessives, en particulier des suppressions de position en suspens, peuvent empêcher les opérations de création et d’actualisation des tables. Pour éviter ce problème, effectuez la maintenance des tables pour supprimer les suppressions de position supplémentaires.
La méthode de maintenance des tables à utiliser dépend de votre moteur Iceberg externe. Par exemple, vous pouvez utiliser la méthode
rewrite_data_filespour Spark avec les optionsdelete-file-thresholdourewrite-all. Pour plus d’informations, consultez rewrite_data_files dans la documentation Apache Iceberg™.
Définir une taille de fichier cible¶
To improve query performance for external Iceberg engines such as Spark or Trino, you can configure a target file size for both Snowflake-managed and externally managed Iceberg tables with write support. You can either set a specific size (16MB, 32MB, 64MB, or 128MB), or use the AUTO option. AUTO works differently, depending on the table type:
Tables gérées par Snowflake : AUTO spécifie que Snowflake doit choisir la taille du fichier de la table en fonction de caractéristiques de la table telles que la taille, les modèles DML, la charge de travail d’ingestion et la configuration du clustering. Snowflake ajuste automatiquement la taille du fichier, à partir de 16 MB, pour de meilleures performances en lecture et en écriture dans Snowflake.
Tables gérées en externe : AUTO spécifie que Snowflake doit être mis à l’échelle de manière dynamique en fonction d’une taille de fichier plus importante.
Vous pouvez définir la taille du fichier cible lorsque vous créez une table Iceberg ou exécuter la commande ALTER ICEBERG TABLE pour modifier la taille du fichier cible d’une table Iceberg existante. Snowflake tente de maintenir des tailles de fichiers proches de la taille cible lors de l’écriture de fichiers Parquet pour une table.
Après avoir défini une taille de fichier cible, Snowflake commence immédiatement à créer des fichiers plus volumineux pour les opérations du nouveau langage de manipulation de données (DML). Les opérations de maintenance des tables Snowflake modifient de manière asynchrone les fichiers de tables existants en fonction de la taille du fichier cible.
L’exemple suivant utilise TARGET_FILE_SIZE pour définir une taille de fichier cible de 128 MB pour une table gérée par Snowflake :
CREATE ICEBERG TABLE my_iceberg_table (col1 INT)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table'
TARGET_FILE_SIZE = '128MB';
Vous pouvez également utiliser ALTER ICEBERG TABLE pour définir la propriété TARGET_FILE_SIZE d’une table existante :
ALTER ICEBERG TABLE my_iceberg_table
SET TARGET_FILE_SIZE = '32MB';
Pour vérifier la valeur de la propriété TARGET_FILE_SIZE pour une table, utilisez la commande SHOW PARAMETERS :
SHOW PARAMETERS LIKE 'target_file_size' FOR my_iceberg_table;
Optimisation des tables pour les tables Iceberg gérées par Snowflake¶
L’optimisation des tables effectue automatiquement la maintenance pour améliorer les performances et réduire les coûts de stockage de vos tables Iceberg gérées par Snowflake.
Note
Snowflake ne prend pas en charge la suppression des fichiers orphelins pour les tables Iceberg gérées par Snowflake. Si vous constatez un décalage entre l’utilisation du stockage de votre stockage Cloud externe et celle de Snowflake, il se peut que vous ayez des fichiers orphelins dans votre stockage Cloud externe. Pour voir votre utilisation du stockage pour Snowflake, vous pouvez utiliser les Vue TABLE_STORAGE_METRICS ou les Vue TABLE_STORAGE_METRICS. Si vous constatez un décalage, contactez le Support Snowflake pour obtenir de l’aide pour déterminer si vous avez des fichiers orphelins et les supprimer.
To improve query performance, you can also set a target file size. For more information, see Définir une taille de fichier cible.
Snowflake prend en charge les fonctionnalités d’optimisation des tables Iceberg résumées dans le tableau suivant :
Fonctionnalité |
Améliore les performances des requêtes |
Reduces storage costs |
Remarques |
|---|---|---|---|
✔ |
✔ |
|
|
✔ |
✔ |
|
|
✔ |
✔ |
|
|
✔ |
✔ |
|
[1] Contrairement aux autres fonctionnalités d’optimisation des tables, le clustering automatique est facturé séparément en tant que fonctionnalité autonome.
Clustering automatique¶
Le clustering automatique réorganise les données en fichiers ou partitions en fonction des colonnes fréquemment interrogées. La taille de fichier pour les tables Iceberg est basée sur la configuration de votre clustering, à moins que vous ne définissiez une taille de fichier cible. Si vous le faites, la taille de fichier correspond à la taille spécifique que vous avez définie. Pour plus d’informations, voir Définir une taille de fichier cible.
Pour définir le clustering automatique, spécifiez le paramètre CLUSTER BY lorsque vous créez une table Iceberg gérée par Snowflake ou que vous modifiez une table existante. Pour plus d’informations, voir :
Pour plus d’informations sur le clustering automatique, consultez Clustering automatique.
Data compaction¶
Le compactage des données combine de petits fichiers en fichiers plus volumineux et plus efficaces pour gérer le stockage, maintenir une taille optimale des fichiers, et améliorer les performances des requêtes.
In most cases, data compaction doesn’t have a significant effect on compute costs, but if these costs are a concern, you can disable compaction. For example, you might want to disable compaction on a table if you rarely query it. To disable or enable data compaction, see Définition du compactage des données.
Note
Pour interroger des tâches de compactage des données pour les tables Iceberg, consultez Vue ICEBERG_STORAGE_OPTIMIZATION_HISTORY. Cette vue inclut le nombre de crédits qui sont facturés pour le compactage des données.
If you have Clustering automatique enabled, clustering performs data compaction on the table. This is true, regardless of whether data compaction is enabled or disabled on the table.
Vous avez également la possibilité de définir une taille de fichier cible. Pour plus d’informations, voir Définir une taille de fichier cible.
Manifest compaction¶
Le compactage des manifestes optimise la couche de métadonnées en réorganisant et en combinant des fichiers manifestes plus petits. Ce compactage réduit la surcharge des métadonnées et améliore les performances des requêtes.
Cette fonctionnalité est activée automatiquement et vous ne pouvez pas la désactiver.
Expiration de l’instantané¶
L’expiration des instantanés supprime systématiquement les anciens instantanés et leurs fichiers de données et de métadonnées uniques de l’historique de la table. Cette suppression est basée sur des politiques de conservation prédéfinies.
Cette fonctionnalité est activée automatiquement et vous ne pouvez pas la désactiver.
Gestion des tables utilisant un catalogue externe¶
Vous pouvez effectuer des opérations de maintenance sur les tables Iceberg qui utilisent un catalogue externe.
Les opérations de maintenance incluent les suivantes :
Instantanés qui expirent
Suppression des anciens fichiers de métadonnées
Compactage des fichiers de données
Important
Pour que votre table Iceberg reste synchronisée avec les changements externes, il est important d’aligner votre planification d’actualisation de Snowflake avec la maintenance de la table. Actualisez la table chaque fois que vous effectuez une opération de maintenance.
Pour en savoir plus sur la maintenance des tables Iceberg qui ne sont pas gérées par Snowflake, consultez Maintenance dans la documentation Apache Iceberg.
Actualiser les métadonnées de la table¶
Lorsque vous utilisez un catalogue Iceberg externe, vous pouvez actualiser les métadonnées de la table à l’aide de la commande ALTER ICEBERG TABLE … REFRESH. L’actualisation des métadonnées de la table synchronise les métadonnées en y apportant les modifications les plus récentes de la table.
Note
Nous vous recommandons de paramétrer l”actualisation automatique pour les tables gérées en externe qui sont prises en charge.
Actualisation des métadonnées d’une table¶
L’exemple suivant actualise manuellement les métadonnées d’une table qui utilise un catalogue externe (par exemple, AWS Glue ou Delta). L’actualisation de la table permet de synchroniser la table en permanence en fonction des modifications apportées dans le catalogue distant.
Avec ce type de table Iceberg, il n’est pas nécessaire de spécifier un chemin d’accès au fichier de métadonnées dans la commande.
ALTER ICEBERG TABLE my_iceberg_table REFRESH;
Pour assurer la mise à jour automatique d’une table, vous pouvez paramétrer l”actualisation automatique. Utilisez la commande ALTER ICEBERG TABLE.
Par exemple :
ALTER ICEBERG TABLE my_iceberg_table SET AUTO_REFRESH = TRUE;
Actualisation des métadonnées d’une table créée à partir de fichiers Iceberg¶
L’exemple suivant actualise manuellement une table créée à partir de fichiers de métadonnées Iceberg dans un emplacement de stockage cloud externe, en spécifiant le chemin d’accès relatif à un fichier de métadonnées sans barre oblique (/). Le fichier de métadonnées définit les données de la table après actualisation.
ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
Récupération des métriques de stockage¶
Snowflake ne facture pas à votre compte les coûts de stockage de tables Iceberg. Toutefois, vous pouvez connaître la quantité de mémoire occupée par une table Iceberg en interrogeant les vues TABLE_STORAGE_METRICS et TABLES dans le schéma Schéma d’information de Snowflake ou Account Usage.
L’exemple de requête suivant joint la vue ACCOUNT_USAGE.TABLE_STORAGE_METRICS à la vue ACCOUNT_USAGE.TABLES, en filtrant sur la colonne TABLES.IS_ICEBERG.
SELECT metrics.* FROM
snowflake.account_usage.table_storage_metrics metrics
INNER JOIN snowflake.account_usage.tables tables
ON (
metrics.id = tables.table_id
AND metrics.table_schema_id = tables.table_schema_id
AND metrics.table_catalog_id = tables.table_catalog_id
)
WHERE tables.is_iceberg='YES';
Définition du compactage des données¶
You can set data compaction on Snowflake-managed Iceberg tables when you create a database, schema, or table, or run the ALTER command to change the setting for an existing database, schema, or table. You can also set data compaction at the account level by using the ALTER ACCOUNT command. For more information about data compaction, see Data compaction.
L’exemple suivant utilise ENABLE_DATA_COMPACTION pour désactiver le compactage des données pour une table gérée par Snowflake :
CREATE ICEBERG TABLE my_iceberg_table (col1 INT)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table'
ENABLE_DATA_COMPACTION = FALSE;
Vous pouvez également utiliser ALTER ICEBERG TABLE pour le désactiver pour une table existante.
ALTER ICEBERG TABLE my_iceberg_table
SET ENABLE_DATA_COMPACTION = FALSE;
Pour plus d’informations, voir :