Dépannage des actualisations des tables dynamiques ignorées ou ayant échoué¶
Cette rubrique vous aide à résoudre les problèmes liés aux actualisations ignorées ou qui ont échoué. Pour les diagnostics d’actualisation lente, voir Surveiller les performances des tables dynamiques.
Lors de la surveillance de l’actualisation de votre table dynamique, notez ce qui suit :
Si vous voyez de nombreuses entrées SKIPPED, voir Actualisations manquées.
Si vous voyez des entrées FAILED cohérentes, consultez Actualisations ayant échoué.
Si vous voyez une entrée SCHEDULED ou EXECUTING bloquée pendant une longue période, consultez Surveiller les performances des tables dynamiques.
Actualisations manquées¶
Les tables dynamiques sont actualisées selon une planification. Lorsqu’une actualisation planifiée démarre, les situations suivantes peuvent entraîner l’interruption de l’actualisation :
Si la table dynamique en cours d’actualisation a une autre table dynamique en amont et que l’actualisation de la table en amont a échoué ou a été ignorée.
Si une actualisation précédente de la table dynamique est toujours en cours.
Si l’actualisation de la table dynamique prend souvent plus de temps que la latence cible, ou s’il existe une différence importante entre la latence cible et la latence réelle, Snowflake peut ignorer une actualisation pour réduire le taux d’omission futures.
Par exemple, si une table dynamique a une latence cible de 1 minute, mais prend généralement une heure pour s’actualiser, le système ajuste la « latence réelle » en conséquence.
Pour améliorer les performances de l’actualisation, voir Optimiser les performances des tables dynamiques.
Les actualisations manuelles ne sont jamais ignorées, mais elles peuvent entraîner l’omission d’autres actualisations planifiées, en particulier si vous effectuez des actualisations manuelles fréquentes sur une table dynamique. Cela peut empêcher l’actualisation des tables dynamiques en aval. Pour cette raison, Snowflake vous recommande d’éviter d’effectuer fréquemment des actualisations manuelles sur une table dynamique avec des tables dynamiques en aval qui sont censées s’actualiser en fonction d’une latence cible.
Actualisations ayant échoué¶
Les échecs d’actualisation sont généralement dus à des problèmes liés à la définition de la requête de la table dynamique, aux données d’entrée (par exemple, les erreurs d’analyse) ou à des défaillances en amont.
Rechercher les actualisations ayant échoué¶
Pour rechercher les actualisations qui ont échoué, interrogez l’historique des actualisations :
SELECT
name,
data_timestamp,
state,
state_code,
state_message
FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(
NAME_PREFIX => 'MY_DB.MY_SCHEMA',
ERROR_ONLY => TRUE
));
Vous pouvez également utiliser la page Refresh History dans l’Snowsight pour afficher les actualisations ayant échoué. La colonne Source Data Timestamp indique l’heure de la dernière actualisation réussie. En cas d’échec de l’actualisation, cette valeur n’est pas incrémentée. Si elle est très en retard par rapport à la latence cible, votre table dynamique est en latence.
Diagnostic des échecs d’actualisation¶
Utilisez le Query Profile pour résoudre les problèmes en sélectionnant Show query profile à côté de chaque actualisation. Le graphique d’exécution de la requête s’affiche.
Utilisez la vue:ui:Graph dans l|sf-web-interface| pour visualiser les dépendances. Une table dynamique en amont qui échoue ou qui est suspendue entraîne l’échec de ses tables en aval. Pour plus d’informations, voir Voir le graphique des tables connectées à vos tables dynamiques.
Interroger les tables d’événements pour détecter les défaillances¶
Vous pouvez interroger une table d’événements pour rechercher les échecs d’actualisation dans vos tables dynamiques :
SELECT
timestamp,
resource_attributes:"snow.executable.name"::VARCHAR AS dt_name,
resource_attributes:"snow.query.id"::VARCHAR AS query_id,
value:message::VARCHAR AS error
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
resource_attributes:"snow.database.name" = 'MY_DB' AND
value:state = 'FAILED'
ORDER BY timestamp DESC;
Pour en savoir plus sur la configuration des tables d’événements et la configuration des alertes, voir Surveillance des tables d’événements et alertes pour les tables dynamiques.