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 automatisée des tables Iceberg fonctionne différemment de celle des tables de répertoire ou des tables externes, car elle ne dépend pas des notifications du fournisseur de cloud. Au lieu de cela, vous configurez la fonctionnalité selon les étapes suivantes :
Définir un intervalle d’actualisation sur une intégration de catalogue. Snowflake prend en charge l’actualisation automatique pour les options de catalogue Iceberg externes suivantes :
Catalogue REST conforme à la spécification Apache Iceberg REST OpenAPI
Snowflake Open Catalog
Stockage d’objets (Delta Lake uniquement)
AWS Glue
Créer une ou plusieurs tables Iceberg qui utilisent l’intégration de catalogue.
Contrôler l’actualisation automatique de chaque table avec le paramètre AUTO_REFRESH.
Cette approche vous permet de gérer de manière centralisée les paramètres d’actualisation via l’intégration de catalogue tout en contrôlant individuellement les tables selon les besoins.
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;
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;
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;
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_SECONDSavant 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;
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;
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');
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'
));
Surveiller les événements d’actualisation automatique¶
Vous pouvez configurer Snowflake pour enregistrer un événement qui fournit des informations sur l’état de l’actualisation automatique d’une table Iceberg. Snowflake enregistre l’événement dans votre tableau des événements actifs. Par exemple, supposons que vous ayez un tableau d’événements associé à une base de données. Lorsque Snowflake actualise automatiquement une table Iceberg dans cette base de données, Snowflake enregistre un événement dans votre tableau d’événements.
La surveillance des événements d’actualisation automatique peut vous aider à obtenir des informations dans les domaines suivants :
Progression de l’actualisation automatique : Suivez l’évolution des instantanés dans le processus d’actualisation automatique.
Statistiques agrégées : Examinez les statistiques récapitulatives pour les opérations d’actualisation automatique.
Vous pouvez également configurer des alertes pour les conditions critiques suivantes :
Erreurs d’actualisation
Latences d’actualisation élevées
Note
La journalisation des événements pour l’actualisation automatique engendre des coûts. Pour plus d’informations, voir Coûts de la collecte de données de télémétrie.
Snowflake enregistre un événement lorsque l’actualisation automatique démarre, se termine ou entraîne une erreur.
Définir le niveau de gravité pour capturer les événements¶
Pour capturer les événements d’actualisation automatique, vous devez définir le paramètre LOG_LEVEL au niveau de la table Iceberg ou du compte. Le LOG_LEVEL détermine les événements à capturer en fonction des valeurs suivantes :
ERROR : Événements qui signalent un changement nécessitant une intervention humaine pour être résolus.
WARN : Événements qui signalent un problème pouvant être résolus sans intervention humaine.
DEBUG : Événements à haut volume.
Note
Il n’existe pas de niveau de gravité par défaut. Pour capturer des événements, vous devez définir le niveau de gravité au niveau du compte ou de la table Iceberg.
Par exemple, pour capturer les événements d’actualisation automatique au niveau DEBUG pour une table Iceberg spécifique, utilisez la commande suivante :
ALTER ICEBERG TABLE <my_table_name> SET LOG_LEVEL = DEBUG;
Pour plus d’informations, voir Définition des niveaux de journalisation, des métriques et du traçage.
Interroger votre tableau d’événements pour les événements d’actualisation automatique¶
Avant de pouvoir interroger des événements d’actualisation automatique, vous devez configurer un tableau d’événements et définir le niveau de gravité pour la capture d’événements.
L’exemple suivant montre comment récupérer les événements d’actualisation automatique Iceberg qui sont générés pendant le traitement des instantanés :
SELECT record_type,
record:"name" event_name,
record:"severity_text" log_level,
resource_attributes:"snow.database.name" database_name,
resource_attributes:"snow.schema.name" schema_name,
resource_attributes:"snow.table.name" table_name,
resource_attributes:"snow.catalog.integration.name" catalog_integration_name,
record_attributes:"snow.snapshot.id" snapshot_id,
parse_json(value):metadata_file_location metadata_file_location,
parse_json(value):snapshot_state snapshot_state
FROM my_active_event_table
WHERE record_type='EVENT' AND event_name='iceberg_auto_refresh_snapshot_lifecycle';
Sortie :
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
| RECORD_TYPE | EVENT_NAME | LOG_LEVEL | DATABASE_NAME | SCHEMA_NAME | TABLE_NAME | CATALOG_INTEGRATION_NAME | SNAPSHOT_ID | METADATA_FILE_LOCATION | SNAPSHOT_STATE |
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
| EVENT | iceberg_auto_refresh_snapshot_lifecycle | DEBUG | TESTDB | TESTSH | TESTTABLE | glue_integration | 4281775564368 | metadata.json | started |
| EVENT | iceberg_auto_refresh_snapshot_lifecycle | DEBUG | TESTDB | TESTSH | TESTTABLE | glue_integration | 4281775564368 | metadata.json | completed |
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
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 :
STALLEDsignifie 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 sainRUNNING.STOPPEDsignifie 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 :Désactivez l’actualisation automatique de la table.
Effectuez une actualisation manuelle des métadonnées. Pour obtenir des instructions, voir Actualiser les métadonnées de la table.
Réactivez l’actualisation automatique à l’aide d’une instruction ALTER ICEBERG TABLE. .. SET AUTO_REFRESH.
Vérifiez que l’actualisation automatique est à l’état
RUNNINGen 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. Utiliser des événements pour surveiller l’actualisation automatique engendre également des coûts. Pour plus d’informations, consultez Coûts de la collecte de données de télémétrie.
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 :
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_SECONDSavant 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.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.