Créer des tables dynamiques

Ce chapitre présente les concepts clés de la création de tables dynamiques, ainsi que les actions qui se produisent lors du processus d’initialisation.

Avant de commencer, assurez-vous de disposer des privilèges permettant de créer des tables dynamiques et vérifiez que tous les objets utilisés par la requête de table dynamique ont le suivi des modifications activé.

Certaines limitations peuvent s’appliquer à la création de tables dynamiques. Pour une liste complète, voir Limitations connues relatives aux tables dynamiques.

Activer le suivi des modifications

Snowflake tente automatiquement d’activer le suivi des modifications sur tous les objets sous-jacents lorsqu’une table dynamique est créée. Les objets de base de données sous-jacents changent, tout comme la table dynamique. Si vous recréez un objet, vous devez réactiver le suivi des modifications.

Lors de la création d’une table dynamique avec actualisation incrémentielle, si le suivi des modifications n’est pas déjà activé sur les tables interrogées, Snowflake tente automatiquement d’activer le suivi des modifications sur ces tables. Afin que les actualisations incrémentielles puissent être prises en charge, il faut que le suivi des modifications soit activé avec une rétention Time Travel différente de zéro sur tous les objets sous-jacents utilisés par une table dynamique.

Pour activer le suivi des modifications sur un objet de base de données spécifique, utilisez les commandes ALTER TABLE, ALTER VIEW et autres commandes similaires sur cet objet. L’utilisateur qui crée la table dynamique doit disposer du privilège OWNERSHIP pour pouvoir activer le suivi des modifications sur tous les objets sous-jacents. Pour vérifier si le suivi des modifications est activé, utilisez les commandes SHOW VIEWS, SHOW TABLES et autres commandes similaires sur les objets sous-jacents et inspectez la colonne change_tracking.

Syntaxe pour la création de tables dynamiques

Supposons que vous souhaitiez créer une table dynamique nommée product qui contient les colonnes product_id et product_name de la table nommée staging_table, et que vous décidiez des points suivants :

  • Vous souhaitez que les données de la table product aient au maximum 20 minutes de retard sur les données de la table staging_table.

  • Vous souhaitez utiliser l’entrepôt mywh pour les ressources de calcul nécessaires pour l”actualisation.

  • Vous souhaitez que le type d’actualisation soit sélectionné automatiquement et que la table dynamique soit actualisée de manière synchrone lors de sa création.

Pour créer cette table dynamique, exécutez l’instruction SQL CREATE DYNAMIC TABLE suivante :

CREATE OR REPLACE DYNAMIC TABLE product
  TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  REFRESH_MODE = auto
  INITIALIZE = on_create
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

Pour une liste complète des paramètres et de la syntaxe des variantes, voir la référence CREATE DYNAMIC TABLE.

Initialisation de la table dynamique

Lorsque vous créez une table dynamique à l’aide d’une instruction CREATE DYNAMIC TABLE, son actualisation initiale a lieu soit à un moment programmé, soit de manière synchrone lors de sa création. Le renseignement initial des données, ou initialisation, dépend du moment où cette actualisation initiale a lieu.

Les tables dynamiques sont actualisées en fonction de la latence cible spécifiée, qui définit le temps de latence maximal autorisé du contenu de la table dynamique par rapport aux mises à jour des tables de base. Si vous spécifiez qu’une table dynamique doit être actualisée de manière synchrone lors de sa création, elle est immédiatement initialisée. Toutefois, si une table dynamique est définie de sorte à être actualisée à un moment programmé, elle est initialisée dans le délai spécifié pour la latence cible.

Prenons l’exemple d’une table dynamique, DT1, avec une latence cible de 30 minutes. Le renseignement initial des données de DT1 peut se produire comme suit :

  1. Si DT1 est configurée de sorte à être actualisée de manière synchrone lors de sa création (par défaut), elle s’initialise lors de sa création.

  2. Si DT1 est configurée de sorte à être actualisée à un moment programmé, elle s’initialise dans le délai spécifié pour la latence cible.

Dans les scénarios impliquant des dépendances en aval, les tables dynamiques changent. Considérons les tables dynamiques DT1 et DT2, où DT1 a une latence cible en aval et DT2 a une latence cible de 30 minutes et dépend de DT1. DT1, avec sa latence cible en aval, ne s’actualise que lorsque des tables dynamiques dépendantes telles que DT2 s’actualisent.

Pour DT1, dans ce contexte :

  1. Si elle est définie de sorte à être actualisée de manière synchrone lors de sa création, elle s’actualise et s’initialise lors de sa création. En cas d’échec de l’initialisation, le processus de création de la table s’interrompt, ce qui permet d’obtenir un retour d’information immédiat sur les définitions incorrectes.

  2. Si elle est configurée de sorte à être actualisée à un moment programmé, l’initialisation dépend du moment où DT2, la table dépendante, est actualisée.

L’initialisation peut prendre un certain temps, suivant la quantité de données analysées. Pour suivre la progression, vous pouvez interroger l’historique d’actualisation à l’aide de la fonction DYNAMIC_TABLE_REFRESH_HISTORY.

Présentation des effets des modifications apportées aux colonnes des tables de base

Les colonnes des tables de base, des vues et des tables dynamiques sous-jacentes peuvent changer au fil du temps. Certaines modifications peuvent avoir un impact sur la table dynamique elle-même ; d’autres peuvent avoir un impact limité ou nul.

Lorsque les objets sous-jacents associés à une table dynamique changent, les comportements suivants s’appliquent :

Changement

Impact

  • Nouvelle colonne ajoutée.

  • Suppression de la colonne existante inutilisée.

Aucune. Si une nouvelle colonne est ajoutée à la table de base ou si une colonne inutilisée est supprimée, aucune action ne se produit et les actualisations se poursuivent comme auparavant.

  • La table de base sous-jacente est recréée avec des noms et des types de colonnes identiques.

  • La colonne de la table de base sous-jacente est recréée avec le même nom et le même type.

Actualisation/réinitialisation complète : lors du cycle d’actualisation suivant, une actualisation complète est effectuée pour s’assurer qu’il n’y a pas de données incorrectes ou périmées dans la table dynamique.

  • Une colonne sous-jacente ou un autre élément utilisé par une table dynamique change de nom ou d’une autre manière.

L’état de la table dynamique devient FAILING. La table dynamique doit être recréée pour tenir compte de la modification. Pour plus d’informations sur les états des tables dynamiques, voir Statuts des tables dynamiques.