Limite de l’actualisation des tables dynamiques¶
Utilisez une limite d’actualisation de table dynamique pour découpler les pipelines de table dynamique tout en lisant les résultats en amont.
Lorsqu’une table dynamique fait référence à une autre, les deux sont actualisées ensemble comme un seul pipeline. Bien que cela fonctionne dans la majorité des scénarios, il existe certains cas d’utilisation, comme le partage de données entre équipes, où les besoins en actualisation des données peuvent varier. Vous pouvez déclarer les deux tables dynamiques comme indépendantes (et donc appartenant à des pipelines différents) en englobant la référence en amont dans DYNAMIC_TABLE_REFRESH_BOUNDARY(). L’isolation des instantanés n’est garantie que dans un seul pipeline, de sorte que les tables dynamiques situées dans une limite d’actualisation ne fournissent pas d’isolation des instantanés entre elles.
Vue d’ensemble¶
Par défaut, lorsqu’une table dynamique lit à partir d’une autre table dynamique, Snowflake :
Actualise les deux tables ensemble dans un seul pipeline.
Coordonne les actualisations de sorte que les tables dynamiques en aval voient l’isolation de l’instantané sur toutes les tables dynamiques en amont du pipeline.
Applique des règles au niveau du pipeline, telles que les contrôles de latence cible.
Dans certains pipelines, il est préférable que chaque relation n’entraîne pas l’actualisation simultanée des deux tables dynamiques. En voici quelques exemples courants :
Pipelines inter-équipes dans lesquels une équipe publie une table dynamique qu’une autre équipe consomme, mais la table dynamique en aval ne doit pas influencer ou hériter du pipeline en amont.
Les migrations incrémentielles : vous convertissez une étape de pipeline en amont en table dynamique, mais vous ne souhaitez pas que les consommateurs en aval commencent à coordonner les actualisations avec cette table.
Les modèles Dynamic-table-on-view-on-dynamic-table, où une table dynamique lit une vue qui interroge une autre table dynamique. Ce modèle n’est pas pris en charge à moins que la vue ne soit définie dans
DYNAMIC_TABLE_REFRESH_BOUNDARY().
Une limite d’actualisation rend cette séparation explicite : les entrées à l’intérieur de la limite sont traitées comme appartenant à un pipeline séparé et sont lues comme des tables régulières.
Syntaxe¶
Où :
object_nameUn nom de table, de vue, de table dynamique ou d’expression de table commune (CTE).
Utilisez ce mot-clé dans la clause FROM/JOIN (y compris dans les CTEs et les branches UNION) d’une définition de table dynamique.
Exemples¶
L’exemple suivant lit une vue qui interroge une autre table dynamique. Sans limite d’actualisation, la création d’une table dynamique qui lit une vue sur une autre table dynamique n’est pas prise en charge. Intégrer la vue dans DYNAMIC_TABLE_REFRESH_BOUNDARY() rend ce modèle possible :
L’exemple suivant joint une table dynamique directement référencée à une vue dont la table dynamique en amont est actualisée selon une planification plus longue. L’intégration de la vue dans DYNAMIC_TABLE_REFRESH_BOUNDARY() empêche la table dynamique en aval de déclencher l’actualisation coûteuse en amont toutes les 5 minutes, tout en lui permettant de lire la dernière version disponible. L’isolation des instantanés n’est pas garantie au-delà de l’actualisation :
Comportement¶
Comment les limites d’actualisation modifient-elles les dépendances ?¶
Lorsque vous encapsulez une entrée dans DYNAMIC_TABLE_REFRESH_BOUNDARY() dans une définition de table dynamique :
Cette entrée est traitée comme une entrée de limite d’actualisation pour cette définition.
Les tables dynamiques accessibles à partir de cette entrée ne sont pas incluses dans le pipeline pour cette définition.
Lors de l’actualisation, la table dynamique lit les objets à leur version actuelle, et non à l’horodatage des données coordonné dans le pipeline.
En conséquence :
- Pas d’actualisation en cascade à travers la limite
L’actualisation de la table dynamique en aval ne déclenche pas les actualisations des tables dynamiques qui ne sont accessibles que via une limite d’actualisation.
- Planification indépendante
La latence cible et la planification d’actualisation de la table dynamique en aval ignorent les tables dynamiques qui ne sont accessibles qu’à travers la limite.
- Pas d’isolation des instantanés à travers la limite
La table dynamique en aval lit toute version des données en amont disponible au moment de l’actualisation. Il n’est pas garanti que les données à travers la limite soient alignées avec l’isolation de l’instantané qui s’applique aux autres dépendances en amont.
Isolation des instantanés et limites d’actualisation¶
Dans un seul pipeline (sans limite), Snowflake garantit l’Isolation de l’instantané sur toutes les tables dynamiques en amont participant à ce pipeline.
Les limites d’actualisation atténuent intentionnellement cette garantie sur la dépendance qui franchit la limite :
A l’intérieur de la limite : les objets s’actualisent et se coordonnent selon leurs propres pipelines.
En dehors de la limite : la table dynamique en aval lit toute version disponible au moment de son actualisation.
Une seule définition de table dynamique peut donc faire référence aux deux types d’entrées :
Références directes aux tables dynamiques en amont, qui participent à l’isolation des instantanés et aux actualisations coordonnées au sein du pipeline.
Références de limites d’actualisation : lisent la dernière version disponible des données en amont de manière indépendante, sans isolation des instantanés.
Utilisez des limites d’actualisation uniquement pour les dépendances pour lesquelles vous n’avez pas besoin d’isoler les instantanés entre les tables dynamiques en amont et en aval.
Cas d’utilisation¶
Découplage des pipelines inter-équipes¶
Différentes équipes peuvent posséder différentes parties d’un pipeline logique :
Equipe A : publie une table dynamique principale utilisée dans toute l’organisation.
Equipe B : définit une table dynamique en aval qui joint la table dynamique principale à des données spécifiques à l’équipe.
L’équipe B peut envelopper la sortie de l’équipe A dans une limite d’actualisation pour :
Éviter d’extraire les tables dynamiques de l’équipe A dans son propre pipeline.
Garder sa propre planification d’actualisation indépendante.
Traitez la table dynamique de l’équipe A de la même manière qu’une table externe mise à jour périodiquement.
Activation d’une table dynamique sur la vue d’une table dynamique¶
Sans limite d’actualisation, la création d’une table dynamique qui lit une vue sur une autre table dynamique n’est pas prise en charge. Avec une limite d’actualisation, vous pouvez explicitement marquer la dépendance de la vue comme une limite :
Ici, order_summary_dt :
Lecture de
orders_dtvia une limite d’actualisation.N’appartient pas au même pipeline que
orders_dt.La lecture de n’importe quelle version de
orders_dtest disponible lorsqu’elle s’actualise.
Exemple : vue de limite appartenant à l’équipe¶
Un modèle commun est pour qu’une équipe possède à la fois une table dynamique et une vue en plis de celle-ci, et qu’elle applique la limite d’actualisation à l’intérieur de la définition de la vue. D’autres équipes consomment ensuite cette vue sans introduire de nouvelles dépendances à la table dynamique de l’équipe propriétaire.
Dans ce modèle :
L’équipe A contrôle la limite d’actualisation en englobant
product_catalog_dtà l’intérieur deproduct.active_products_public_v.L’équipe B et les autres équipes définissent leurs propres tables dynamiques qui ne font référence qu’à la vue publiée.
Ces tables dynamiques en aval n’ajoutent pas
product_catalog_dtà leur propre pipeline ;product_catalog_dtreste en dehors de leurs pipelines même si ses données sont visibles via la vue.
Migration incrémentielle vers des tables dynamiques¶
Si vous migrez une étape de pipeline existante vers une table dynamique, vous ne souhaiterez peut-être pas que les consommateurs en aval puissent :
Commencer à déclencher des actualisations de la nouvelle table dynamique.
Hériter de nouvelles exigences en matière de latence cible.
En encapsulant la nouvelle table dynamique (ou une vue qui s’appuie sur celle-ci) dans une limite d’actualisation, les tables dynamiques en aval peuvent l’utiliser sans être ajoutées au même pipeline.
Latence cible¶
Les limites d’actualisation influencent également la manière dont la latence cible est appliquée.
La latence cible d’une table dynamique en amont doit égale ou plus courte que celle de toute table dynamique en aval dans le même pipeline. Les tables dynamiques référencées via DYNAMIC_TABLE_REFRESH_BOUNDARY() n’appartiennent pas au même pipeline, donc cette règle ne s’applique pas au-delà de la limite.
Les tables dynamiques en amont à l’intérieur d’une limite d’actualisation conservent leur propre latence cible et leur propre comportement de planification. elles ne sont pas resserrées ou élargies par les choix en aval au-delà de la limite.
Restrictions et limitations¶
Les limites d’actualisation sont soumises à quelques règles importantes :
La même table dynamique à l’intérieur et à l’extérieur d’une limite d’actualisation n’est pas autorisée
Toutes les références à la même table dynamique en amont dans une seule définition doivent être soit directement dans la définition, soit englobées dans DYNAMIC_TABLE_REFRESH_BOUNDARY() . En combinant les deux, il serait possible de consulter la même table dynamique sous différentes versions. Snowflake bloque ces définitions et renvoie une erreur descriptive.
Cibles de limites non prises en charge*
DYNAMIC_TABLE_REFRESH_BOUNDARY() doit englober un objet nommé (table, vue, table dynamique ou CTE). Elle ne peut pas englober :
Les sous-requêtes en ligne.
Les fonctions de table ou les UDTFs.
Les appels de
TABLE(...)arbitraires.
Effet en dehors des tables dynamiques
Vous pouvez appeler DYNAMIC_TABLE_REFRESH_BOUNDARY() dans des requêtes SELECT ordinaires, mais en dehors d’une définition de table dynamique, cela n’a aucun effet.
Meilleures pratiques¶
Lors de l’utilisation de limites d’actualisation dans les pipelines de tables dynamiques :
Utilisez une limite d’actualisation lorsque :
Vous souhaitez consommer la table dynamique d’une autre équipe sans joindre son pipeline.
Vous n’avez pas besoin d’isoler l’instantané d’une dépendance particulière en amont.
Une table dynamique dépend d’une vue qui fait référence à une autre table dynamique. Ce modèle n’est pris en charge que lorsque la vue ou la table dynamique en amont est intégrée dans
DYNAMIC_TABLE_REFRESH_BOUNDARY().
Évitez une limite d’actualisation lorsque :
Vous avez besoin d’une isolation des instantanés pour cette dépendance.
Vous souhaitez que les actualisations en aval soient coordonnées avec les tables dynamiques en amont et, si nécessaire, que les actualisations se déclenchent en cascade.
Vous comptez sur des relations de latence cible globales dans l’ensemble du pipeline.