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

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

Récupération du statut d’actualisation automatique

Pour récupérer le statut d’actualisation automatique d’une table, 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.

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 encourus en examinant Account Usage Vue PIPE_USAGE_HISTORY. Les canaux d’actualisation automatique sont répertoriés sous 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 catalogue créées avant la version 8.22 de Snowflake, 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.

  • Assurez-vous que le nouvel instantané de table est un enfant direct de l’instantané de table actuel. Dans le cas contraire, l’actualisation automatique est définie sur l’état STOPPED. Pour reprendre l’actualisation automatique lorsque cela se produit, voir Reprise en cas d’erreur.

  • L’actualisation automatique n’est pas prise en charge lorsque vous utilisez une intégration de catalogue pour le stockage d’objets.

  • Les manifestes Iceberg version 1 sans colonne de numéro de séquence ne sont actuellement pas pris en charge.