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 tablestaging_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;
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 :
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.
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 :
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.
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 |
---|---|
|
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. |
|
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. |
|
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. |