Gérer une table Iceberg

Cette rubrique couvre les tâches suivantes pour vous faciliter la gestion d’une table Iceberg :

Vous pouvez également convertir une table Iceberg qui utilise une intégration de catalogue en une table qui utilise Snowflake comme catalogue Iceberg. Pour en savoir plus, voir Conversion d’une table Iceberg.

Actualiser manuellement les métadonnées de la table

Lorsque vous utilisez une intégration de catalogue, vous pouvez actualiser les métadonnées de la table à partir d’un fichier de métadonnées Iceberg spécifié via la commande ALTER ICEBERG TABLE. 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.

Actualiser les métadonnées d’une table Iceberg qui utilise AWS Glue comme catalogue

L’exemple suivant actualise manuellement les métadonnées d’une table qui utilise AWS Glue comme catalogue Iceberg. 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

Actualiser les métadonnées d’une table Iceberg créée à partir de fichiers dans le stockage d’objets

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

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 à l’emplacement spécifié par le paramètre BASE_LOCATION lors de la création de la table.

Vous pouvez également appeler la fonction SYSTEM$GET_ICEBERG_TABLE_INFORMATION pour générer des métadonnées Iceberg pour toute nouvelle modification.

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"}                         |
+-----------------------------------------------------------------------------------------------------------+

Interroger une table Iceberg

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, et sur le volume externe associé à la table. Pour interroger une table non gérée par Snowflake, l’utilisateur doit également disposer du privilège USAGE sur l’intégration de catalogue de 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

Mettre à jour une table Iceberg

Vous pouvez utiliser les instructions INSERT et UPDATE pour modifier une table Iceberg qui utilise Snowflake comme catalogue.

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

Récupérer les métriques de stockage pour les tables Iceberg

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