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;
Copy

Utilisation des commandes DML avec des tables gérées par Snowflake

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 :

Note

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

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;
Copy

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');
Copy

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

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.

  • 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

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;
Copy

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;
Copy

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';
Copy

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';
Copy