Dépannage des tables dynamiques

Cette rubrique aborde les solutions de dépannage des tables dynamiques qui ne fonctionnent pas comme prévu :

Certaines actions peuvent être restreintes en raison de limitations concernant l’utilisation de tables dynamiques ou si vous ne disposez pas des privilèges nécessaires. Pour plus d’informations, voir Limitations connues relatives aux tables dynamiques et Contrôle de l’accès aux tables dynamiques.

Pour plus d’informations sur les coûts des tables dynamiques, voir Compréhension du coût des tables dynamiques.

Si vous rencontrez un problème qui n’est pas répertorié ici, contactez le support Snowflake.

Dépannage de l’actualisation des tables dynamiques

Problème

Solution

Ma table dynamique utilise une actualisation complète au lieu d’une actualisation incrémentielle.

Le mode d’actualisation d’une table dynamique est déterminé au moment de la création et est immuable par la suite. S’il n’est pas spécifié explicitement, le mode d’actualisation est par défaut AUTO , ce qui sélectionne un mode d’actualisation en fonction de divers facteurs tels que la complexité de la requête ou les constructions, opérateurs ou fonctions non pris en charge.

Pour un comportement cohérent entre les versions de Snowflake, définissez explicitement le mode d’actualisation de toutes les tables dynamiques. Par exemple, si vous souhaitez que vos tables dynamiques soient actualisées uniquement de manière incrémentielle, vous devez définir explicitement le mode d’actualisation sur INCREMENTAL lors de leur création, en gardant à l’esprit qu’il peut y avoir des limitations relatives à l’utilisation de l’actualisation incrémentielle. Pour plus d’informations, voir Définir le mode d’actualisation pour toutes les tables dynamiques de production.

En utilisant un rôle doté des privilèges nécessaires, vous pouvez vérifier le mode d’actualisation à l’aide de l’une des méthodes suivantes :

  • Avec SQL : exécutez l’instruction SHOW DYNAMIC TABLES. Dans le résultat, la colonne text indique le mode d’actualisation spécifié par l’utilisateur, la colonne refresh_mode indique le mode d’actualisation réel et la colonne refresh_mode_reason indique pourquoi le mode d’actualisation réel a été choisi.

  • Avec Snowsight : dans le menu de navigation, sélectionnez Monitoring » Dynamic Tables, puis votre table dynamique. Vous pouvez voir le mode d’actualisation de la tabler dynamique dans l’onglet Table Details.

L’actualisation incrémentielle de ma table dynamique est lente.

Les performances d’actualisation d’une table dynamique reposent sur des hypothèses spécifiques concernant la charge de travail ou les données qu’elle traite.

Utilisez Refresh History pour voir la variance ou repérer les valeurs aberrantes :

  1. Connectez-vous à Snowsight.

  2. Dans la navigation, accédez à Monitoring » Dynamic Tables.

  3. Sélectionnez votre table dynamique et allez dans l’onglet Refresh History.

  4. Utilisez les durées d’actualisation de votre table dynamique au cours des dernières 24 heures pour résoudre le problème.

Ma table dynamique exécute une actualisation vide, mais je vois un coût.

Les actualisations qui ne produisent aucune nouvelle ligne nette (c’est-à-dire aucune ligne ajoutée, mise à jour ou supprimée) consomment des ressources de l’entrepôt lorsqu’elles sont associées à des changements dans l’un des objets en amont référencés par la table dynamique.

Par exemple, si l’entrepôt virtuel associé est suspendu et qu’aucun changement dans les objets de base n’est identifié, l’entrepôt virtuel suspendu ne reprend pas et aucun crédit n’est consommé. C’est ce que l’on appelle une actualisation NO_DATA. Inversement, si des changements sont identifiés, l’entrepôt virtuel est automatiquement repris pour traiter les mises à jour, ce qui consomme des ressources de l’entrepôt même si le résultat net est zéro ligne appliquée à la table dynamique.

Si vous constatez un coût alors que vous n’avez apporté aucune modification à votre table dynamique, cela peut être dû à une modification de votre table source. Vous pouvez utiliser l’onglet Refresh History dans Snowsight pour vérifier si les crédits de l’entrepôt virtuel ont été consommés :

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Monitoring » Dynamic Tables.

  3. Sélectionnez votre table dynamique et allez dans l’onglet Refresh History.

  4. Cochez la case Warehouse used only pour voir les actualisations qui ont utilisé l’entrepôt pour se mettre à jour.

Pour plus d’informations, voir Compréhension du coût des tables dynamiques.

Ma table dynamique n’a pas été actualisée.

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, Snowflake peut ignorer une actualisation pour réduire le taux d’omission futures.

Les actualisations manuelles ne sont jamais ignorées, mais elles peuvent entraîner l’omission d’autres actualisations, 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 ne vous recommande pas 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.

L’actualisation de ma table dynamique a échoué.

Comme une requête Snowflake classique, l’actualisation d’une table dynamique peut échouer en raison de problèmes liés à la définition de la requête de la table dynamique, aux données d’entrée (par exemple, des erreurs d’analyse) ou à des problèmes internes au système.

Pour déterminer la raison de l’échec de l’actualisation, procédez comme suit :

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Monitoring » Dynamic Tables.

  3. Sélectionnez votre table dynamique et allez dans l’onglet Table Details.

  4. Survolez Last Completed Refresh sous Details. Une boîte de dialogue détaillant le code d’erreur et le message relatifs à l’échec de l’actualisation s’affiche.

Si l’actualisation a échoué en raison d’un code d’erreur upstream_failed , il se peut que l’une des tables dynamiques en amont présente une erreur. Pour déterminer quelle table en amont est à l’origine de l’échec :

  1. Dans le menu de navigation Snowsight, sélectionnez Monitoring » Dynamic Tables puis votre table dynamique.

  2. Ouvrez la page Graph pour voir l’historique des graphiques de votre table dynamique.

  3. Dans le graphique, sélectionnez la table dynamique en amont qui est rouge et vérifiez son Refresh History.

Ma table dynamique se réinitialise.

Il se peut que votre table dynamique se réinitialise pour l’une des raisons suivantes :

  • Une ou plusieurs entrées de la table dynamique sont remplacées. Par exemple, si votre table dynamique est définie sur une vue et que vous remplacez la vue, la table dynamique doit être réinitialisée.

  • Si le schéma des entrées a changé et que votre table dynamique repose sur les colonnes modifiées.

  • Les politiques d’accès aux données sont ajoutées, supprimées ou modifiées sur les entrées de la table dynamique.

  • Les tables dynamiques incrémentielles clonées peuvent avoir besoin d’être réinitialisées lors de leur première actualisation après leur création.

  • Les tables dynamiques répliquées avec actualisation incrémentielle se réinitialisent après le basculement avant de pouvoir reprendre l’actualisation incrémentielle.

Pour des informations générales sur l’initialisation, voir Compréhension de l’initialisation des tables dynamiques.

Dépannage de la création de tables dynamiques

Problème

Solution

La création de ma table dynamique prend beaucoup de temps.

Lorsque vous créez une table dynamique à l’aide d’une instruction CREATE DYNAMIC TABLE, son actualisation initiale a lieu soit à un moment planifié (ON_SCHEDULE), soit de manière synchrone lors de sa création (ON_CREATE). Le renseignement initial des données, ou initialisation, dépend du moment où cette actualisation initiale a lieu. Par exemple, l’initialisation synchrone déclenche une actualisation de toutes les tables dynamiques référencées en amont, ce qui peut ajouter un temps de traitement supplémentaire à la durée totale de l’initialisation.

L’initialisation peut prendre un certain temps, suivant la quantité de données analysées. Pour voir la progression, procédez comme suit :

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Monitoring » Query History.

  3. Dans le menu déroulant Filters, entrez CREATE DYNAMIC TABLE dans le filtre SQL Text et entrez le nom de votre entrepôt dans le filtre Warehouse.

  4. Sélectionnez la requête avec votre table dynamique sous SQL text et utilisez les onglets Query Details et Query Profile pour suivre la progression.

Pour des informations générales sur l’initialisation, voir Compréhension de l’initialisation des tables dynamiques.

Dépannage des tables dynamiques

Problème

Solution

Je ne peux pas voir les métadonnées de ma table dynamique.

Pour afficher les métadonnées et la fonction Information Schema d’une table dynamique, vous devez utiliser un rôle disposant du privilège MONITOR sur cette table dynamique. Pour plus d’informations, voir Privilèges permettant d’afficher les métadonnées d’une table dynamique.

Ma table dynamique est suspendue.

Une table dynamique peut être suspendue pour plusieurs raisons :

  • Elle a été suspendue directement à l’aide de la commande ALTER DYNAMIC TABLE … SUSPEND.

  • Elle se trouve en aval d’une table dynamique suspendue.

  • Elle n’a pas réussi à s’actualiser cinq fois de suite (les omissions ne sont pas prises en compte dans ce décompte).

  • Il s’agit d’une table dynamique répliquée, soit dans un groupe de réplication, soit dans un groupe de basculement. Voir Réplication et tables dynamiques.

  • Elle a été clonée à partir d’une table dynamique dont une ou plusieurs tables de base ont été supprimées au moment du clonage.

Pour connaître la raison pour laquelle votre table dynamique a été suspendue, procédez comme suit :

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Monitoring » Dynamic Tables.

  3. Sélectionnez votre table dynamique et allez dans l’onglet Table Details.

  4. Survolez Scheduling State sous Details. Une boîte de dialogue détaillant la raison et la date de la suspension apparaît.