Comprendre la latence cible des tables dynamiques

Le rafraîchissement dynamique de la table est déclenché par le décalage cible des données, qui détermine leur degré d’obsolescence. Vous pouvez définir une latence cible fixe ou définir le tableau dynamique sur DOWNSTREAM, en faisant dépendre sa durée d’actualisation des autres tables dynamiques qui en dépendent.

La latence cible d’une table dynamique est mesurée par rapport aux tables dynamiques situées à la racine du graphique, et non par rapport aux tables dynamiques situées directement en amont. Pour voir le graphique des tables liées à votre table dynamique, voir Voir le graphique des tables connectées à vos tables dynamiques.

Snowflake planifie les actualisations de manière à ce que la latence réelle de vos tables dynamiques reste inférieure à la latence cible. La durée de chaque actualisation dépend de la requête, du modèle de données et de la taille de l’entrepôt. Lorsque vous choisissez une latence cible, tenez compte du temps nécessaire pour actualiser chaque table dynamique dans une chaîne jusqu’à la racine. Si vous ne le faites pas, certaines actualisations risquent d’être ignorées, ce qui entraînera une latence plus importante.

Note

La latence cible n’est pas une garantie. Il s’agit plutôt d’un objectif que Snowflake tente d’atteindre. Les données des tables dynamiques sont actualisées au plus près de la latence cible. Toutefois, la latence cible peut être dépassée en raison de facteurs tels que la taille de l’entrepôt, la taille des données, la complexité des requêtes et d’autres facteurs similaires.

Types de latence cible

La latence cible est spécifiée de l’une des manières suivantes. La latence cible est inversement proportionnelle à la fréquence d’actualisation des tables dynamiques : des actualisations fréquentes impliquent une latence plus faible.

  1. Mesure du niveau d’actualisation : spécifie le délai maximum pendant lequel le contenu de la table dynamique doit être décalé par rapport aux mises à jour des tables de base.

    L’exemple suivant paramètre my_dynamic_table pour une actualisation et un maintien du niveau d’actualisation toutes les heures :

    ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = '1 hour';
    
    Copy
  2. En aval : spécifie que la table dynamique doit s’actualiser sur demande lorsque d’autres tables dynamiques dépendantes s’actualisent. Cette actualisation peut être déclenchée par l’initialisation à la création, l’actualisation manuelle ou l’actualisation planifiée d’une table dynamique en aval.

    Dans l’exemple suivant, la my_dynamic_table est définie pour se rafraîchir en fonction de la latence cible de ses tables dynamiques en aval. Si my_dynamic_table n’a pas de tables dynamiques qui en dépendent, elle ne sera pas actualisée.

    ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = DOWNSTREAM;
    
    Copy

Déterminer la latence cible optimale pour une table dynamique

La latence cible que vous avez définie affecte la fréquence des actualisations planifiées de votre table dynamique.

Snowflake planifie les actualisations un peu plus tôt afin de laisser le temps à l’actualisation de se terminer. Par exemple, si vous avez défini la latence cible à 5 minutes, cela ne signifie pas que la table sera actualisée exactement toutes les 5 minutes. Les intervalles d’actualisation réels peuvent être plus courts que le délai spécifié. Si vous souhaitez des actualisations de 5 minutes plus réguliers, envisagez d’augmenter légèrement la latence cible.

Vous pouvez utiliser la fonction de table DYNAMIC_TABLE_REFRESH_HISTORY dans INFORMATION_SCHEMA ou Snowsight pour déterminer le temps de latence cible optimal en fonction de vos exigences. Par exemple, l’analyse des détails de l’actualisation, y compris la durée et les actualisations sautées, pour prendre une décision éclairée.

Pour plus d’informations sur la surveillance des actualisations des tables dynamiques et le dépannage, voir Surveiller les tables dynamiques et Diagnostic des problèmes courants liés à l’actualisation des tables dynamiques.

La fonction DYNAMIC_TABLE_REFRESH_HISTORY renvoie des informations sur chaque actualisation d’une table dynamique, y compris la durée de l’actualisation et les actualisations qui ont été ignorées.

SELECT
    name
FROM
  TABLE (
    INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (
      NAME_PREFIX => 'MYDB.MYSCHEMA.', ERROR_ONLY => TRUE
    )
  );
Copy

La sortie reflète les actualisations au fil du temps. Chaque ligne représente une actualisation. Une nouvelle ligne est ajoutée chaque fois que la table dynamique est actualisée.

Modifier la latence cible

Vous pouvez vouloir ajuster la latence cible d’une table dynamique pour l’une des raisons suivantes :

  • Vous avez besoin de données plus récentes. La réduction de la latence cible permet de rafraîchir la table dynamique plus fréquemment, ce qui fournit des données plus fraîches et plus proches du temps réel.

  • Vous voulez optimiser les ressources. L’augmentation de la latence cible peut réduire la fréquence des actualisations, ce qui permet d’économiser des ressources calcul, ceci est utile pour les charges de travail qui ne nécessitent pas de mises à jour constantes ou dont les données changent peu souvent. Par exemple, si une table dynamique est actualisée toutes les 20 minutes, mais qu’elle ne doit se trouver qu’à une heure des tables sources, le fait de paramétrer une latence cible d’une heure peut permettre de réduire les coûts.

  • Vous souhaitez que la latence cible s’aligne sur le pipeline de données. Si votre table dynamique dépend d’autres tables dont les intervalles d’actualisation sont plus longs, l’ajustement de la latence cible permet de s’aligner sur les dépendances.

Pour modifier la latence cible, utilisez la commande ALTER DYNAMIC TABLE. Pour plus d’informations, voir Modifier l’entrepôt ou la latence cible pour les tables dynamiques.

Comment les relations en amont et en aval affectent la latence cible

Le diagramme suivant illustre les opérations de suspension, de reprise et d’actualisation manuelle dans le contexte des relations en amont et en aval avec d’autres tables dynamiques.

Relation entre les tables dynamiques. Utilisé pour expliquer les notions de suspension, de reprise et d'actualisation manuelle.

Le diagramme représente un pipeline de données déclaratif simple construit avec des tables dynamiques :

  • DT2 est décrite comme en aval de DT1 parce qu’elle dépend de cette table dynamique, et en amont de DT3, qui en dépend.

  • DT3 est en aval de DT2 et DT1, car elle dépend directement de DT2 et indirectement de DT1.

  • DT1 est directement ou indirectement en amont des autres tables dynamiques.

Exemple : latence cible pour les chaînes de tables dynamiques

Prenons l’exemple suivant : une table dynamique (DT2) lit les données d’une autre table dynamique (DT1) pour matérialiser son contenu. Dans ce scénario, un rapport consomme les données de DT2 via une requête.

Exemple simple de deux tables dynamiques : DT2, étant définie en fonction de DT1.

Les résultats suivants sont possibles, en fonction de la manière dont chaque table dynamique spécifie sa latence :

DT1

DT2

Actualiser les résultats

TARGET_LAG = DOWNSTREAM

TARGET_LAG = 10minutes

DT2 est mise à jour au moins toutes les 10 minutes. DT1 déduit sa latence de DT2, elle est mise à jour chaque fois que DT2 requiert des mises à jour.

TARGET_LAG = 10minutes

TARGET_LAG = DOWNSTREAM

Ce scénario doit être évité. La requête de rapport ne recevra aucune donnée. DT1 est fréquemment actualisée et DT2 ne l’est pas car il n’y a pas de table dynamique basée sur DT2.

TARGET_LAG = 5minutes

TARGET_LAG = 10minutes

DT2 est mis à jour environ toutes les 10 minutes avec des données provenant de DT1 et datant d’au plus 5 minutes.

TARGET_LAG = DOWNSTREAM

TARGET_LAG = DOWNSTREAM

Ni DT1, ni DT2 ne sont actualisées périodiquement parce qu’elles ont tous deux un décalage en aval et qu’aucun n’a de consommateur en aval avec une latence définie.