Créer des tables dynamiques¶
Cette rubrique 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¶
Lors de la création d’une table dynamique avec un mode d’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. 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.
Note
Snowflake ne tente pas automatiquement d’activer le suivi des modifications sur les tables dynamiques créées avec le mode d’actualisation complète.
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 mode d’actualisation soit automatiquement sélectionné.
Snowflake recommande d’utiliser le mode d’actualisation automatique uniquement pendant le développement. Pour plus d’informations, voir Définir le mode d’actualisation pour toutes les tables dynamiques de production.
Vous souhaitez que la table dynamique soit actualisée de manière synchrone lors de sa création.
Vous souhaitez que le mode 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.
Compréhension de l’initialisation des tables dynamiques¶
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.