Actualisation automatique des tables Apache Iceberg™

Configurez les actualisations automatiques des métadonnées pour les tables Tables Apache Iceberg™ nouvelles ou existantes gérées en externe. Grâce aux actualisations automatisées, Snowflake interroge votre catalogue Iceberg externe de manière continue et sans serveur pour synchroniser les métadonnées avec les modifications distantes les plus récentes.

L’actualisation automatique est prise en charge pour les tables qui utilisent les options de catalogues externes suivantes :

  • AWS Glue

  • Catalogue REST conforme à la spécification Apache Iceberg REST OpenAPI

  • Snowflake Open Catalog

  • Stockage d’objets (Delta Lake uniquement)

Définition de l’intervalle d’actualisation sur une intégration de catalogue

Lorsque vous exécutez la commande CREATE CATALOG INTEGRATION, vous pouvez spécifier une valeur pour le paramètre REFRESH_INTERVAL_SECONDS. Sinon, l’intervalle d’actualisation par défaut est de 30 secondes. Snowflake interroge le catalogue externe uniquement si des tables Iceberg sont définies avec l’intégration de catalogue.

L’exemple suivant crée une intégration de catalogue pour AWS Glue, en spécifiant un intervalle d’actualisation de 60 secondes :

CREATE CATALOG INTEGRATION auto_refresh_catalog_integration
  CATALOG_SOURCE = GLUE
  CATALOG_NAMESPACE = 'my_catalog_namespace'
  TABLE_FORMAT = ICEBERG
  GLUE_AWS_ROLE_ARN = 'arn:aws:iam::123456789123:role/my-catalog-role'
  GLUE_CATALOG_ID = '123456789123'
  ENABLED = TRUE
  REFRESH_INTERVAL_SECONDS = 60;
Copy

Pour mettre à jour l’intervalle d’actualisation d’une intégration de catalogue, utilisez la commande ALTER CATALOG INTEGRATION.

Par exemple :

ALTER CATALOG INTEGRATION auto_refresh_catalog_integration SET REFRESH_INTERVAL_SECONDS = 120;
Copy

Création d’une table Iceberg avec actualisation automatique

Créez une table Iceberg via la commande CREATE ICEBERG TABLE. Pour spécifier que la table doit utiliser des actualisations automatiques des métadonnées, définissez AUTO_REFRESH = TRUE.

L’exemple suivant crée une table Iceberg qui utilise AWS Glue comme catalogue, en spécifiant l’intégration de catalogue créée précédemment (auto_refresh_catalog_integration) et le CATALOG_TABLE_NAME depuis AWS Glue.

CREATE OR REPLACE ICEBERG TABLE auto_refresh_iceberg_table
  CATALOG_TABLE_NAME = 'myGlueTable'
  CATALOG = 'auto_refresh_catalog_integration'
  AUTO_REFRESH = TRUE;
Copy

Activation ou désactivation de l’actualisation automatique

Note

  • Si la table utilise une intégration de catalogue créée avant la version 8.22 de Snowflake, vous devez utiliser la commande ALTER CATALOG INTEGRATION pour définir le paramètre REFRESH_INTERVAL_SECONDS avant d’activer l’actualisation automatique de la table.

  • L’activation et la désactivation fréquentes de l’actualisation automatique d’une table Iceberg peuvent ralentir les actualisations des métadonnées de la table.

Utilisez la commande ALTER ICEBERG TABLE pour activer ou désactiver l’actualisation automatique d’une table Iceberg existante.

Par exemple :

ALTER ICEBERG TABLE my_iceberg_table SET AUTO_REFRESH = FALSE;
Copy

Suivi du statut d’actualisation automatique

SHOW ICEBERG TABLES

Pour obtenir le statut d’actualisation automatique de plusieurs tables, utilisez la commande SHOW ICEBERG TABLES.

SHOW ICEBERG TABLES;
Copy

La sortie de la commande comprend une colonne nommée auto_refresh_status, qui affiche les mêmes informations que la fonction SYSTEM$AUTO_REFRESH_STATUS pour chaque table sur laquelle vous disposez de privilèges d’accès.

SYSTEM$AUTO_REFRESH_STATUS

Pour récupérer le statut d’actualisation automatique d’une table déterminée, appelez la fonction SYSTEM$AUTO_REFRESH_STATUS.

SELECT SYSTEM$AUTO_REFRESH_STATUS('my_iceberg_table');
Copy

La fonction renvoie des détails sur le canal que Snowflake utilise pour automatiser les actualisations de la table, comme l’état d’exécution et la taille de la file d’attente des instantanés. Un état d’exécution de RUNNING indique que l’actualisation automatique s’exécute comme prévu. Pour plus d’informations, voir SYSTEM$AUTO_REFRESH_STATUS.

ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY

Pour récupérer les métadonnées et les informations d’instantané concernant l’historique d’actualisation le plus récent d’une table déterminée, utilisez la fonction ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY.

SELECT *
FROM TABLE(INFORMATION_SCHEMA.ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY(
  TABLE_NAME => 'my_iceberg_table'
));
Copy

Reprise en cas d’erreur

Lorsqu’une erreur se produit pendant le processus d’actualisation automatique, Snowflake met à jour l’état d’exécution avec l’une des valeurs suivantes :

  • STALLED signifie que Snowflake tente une reprise en cas d’erreur. Si la reprise aboutit, le processus d’actualisation automatique continue de s’exécuter comme prévu et l’état d’exécution revient à un état sain RUNNING.

  • STOPPED signifie que le processus d’actualisation automatique a rencontré une erreur irrécupérable et que les actualisations automatiques de la table ont été arrêtées.

    Une erreur irrécupérable peut se produire, par exemple, lorsque Snowflake ne peut pas établir une lignée directe entre l’instantané cible et l’instantané actuel.

    Pour une reprise à partir d’un état STOPPED, procédez comme suit :

    1. Désactivez l’actualisation automatique de la table.

    2. Effectuez une actualisation manuelle des métadonnées. Pour obtenir des instructions, voir Actualiser les métadonnées de la table.

    3. Réactivez l’actualisation automatique à l’aide d’une instruction ALTER ICEBERG TABLE. .. SET AUTO_REFRESH.

    4. Vérifiez que l’actualisation automatique est à l’état RUNNING en appelant la fonction SYSTEM$AUTO_REFRESH_STATUS. Vous pouvez également appeler la fonction plusieurs fois pour confirmer que le nombre d’instantanés en file d’attente (pendingSnapshotCount) diminue progressivement.

Facturation

Snowflake utilise Snowpipe pour automatiser les actualisations des tables Iceberg, de sorte que les frais d’actualisation automatique apparaissent sur la même ligne de votre facture que les frais Snowpipe. Il n’y a pas de frais de fichier Snowpipe pour cette fonctionnalité.

Vous pouvez estimer les frais engendrés en examinant la Vue PIPE_USAGE_HISTORY (schéma Account Usage), qui affiche le nom de la table Iceberg dans la colonne pipe_name.

Pour les tables Iceberg basées sur Delta, les canaux d’actualisation automatique affichent un nom de canal NULL.

Pour plus d’informations sur les frais de table Iceberg, voir Facturation des tables Iceberg.

Considérations et limites

Tenez compte des éléments suivants lorsque vous travaillez avec des tables Iceberg qui utilisent l’actualisation automatique :

  • Lorsque l’actualisation automatique est activée, vous ne pouvez pas actualiser manuellement les métadonnées de la table. Pour effectuer une actualisation manuelle, commencez par désactiver l’actualisation automatique.

  • Pour les intégrations de catalogues créées avant la version 8.22 de Snowflake (ou 9.2 pour les tables basées sur Delta), vous devez définir manuellement le paramètre REFRESH_INTERVAL_SECONDS avant d’activer l’actualisation automatique sur les tables qui dépendent de cette intégration de catalogue. Pour obtenir des instructions, voir ALTER CATALOG INTEGRATION … SET AUTO_REFRESH.

  • Si votre table est vide, insérez des données dans celle-ci, puis effectuez une actualisation manuelle dans Snowflake avant d’activer l’actualisation automatique pour éviter un comportement indéfini.

  • Pour les intégrations au catalogue pour le stockage d’objets, l’actualisation automatique n’est prise en charge que pour les intégrations avec TABLE_FORMAT = DELTA.

  • Pour les tables recevant fréquemment des mises à jour, l’utilisation d’un intervalle d’interrogation plus court (REFRESH_INTERVAL_SECONDS) peut entraîner une dégradation des performances.