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;
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 :
Vous pouvez également copier des données en masse dans une table gérée par Snowflake avec COPY INTO <table> ou en utilisant Snowpipe.
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 à 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.
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"} |
+-----------------------------------------------------------------------------------------------------------+
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.
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;
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';