Créer des tables dynamiques¶
Les tables dynamiques peuvent être créées et supprimées de la même manière que les tables classiques, bien qu’il existe certaines différences et limitations. En outre, la modification des tables, vues et autres tables dynamiques sous-jacentes qui composent une requête de table dynamique peut entraîner des changements de comportement ou rendre une table dynamique existante inopérante. Les sections suivantes décrivent la création et la suppression de tables dynamiques, ainsi que les limitations et les problèmes qui en découlent.
Tâche |
Description |
---|---|
Création de tables dynamiques, y compris de privilèges requis pour créer une table dynamique. |
|
Suppression des tables dynamiques. |
|
Constructions de requête non prises en charge actuellement dans les tables dynamiques |
Constructions de requête non prises en charge. |
Fonctions non déterministes prises en charge dans les tables dynamiques |
Fonctions non déterministes prises en charge. |
Compréhension de la création de tables dynamiques et du suivi des modifications. |
Créer une table dynamique¶
Pour créer une table dynamique, utilisez la commande CREATE DYNAMIC TABLE en précisant la requête à utiliser, la latence cible des données et l’entrepôt à utiliser pour effectuer les actualisations.
Par exemple, 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 vous décidez :
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 aux actualisations (incrémentales et complètes).
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
AS
SELECT product_id, product_name FROM staging_table;
Comme pour une vue matérialisée, les colonnes d’une table dynamique sont déterminées par les colonnes spécifiées dans l’instruction SELECT utilisée pour créer la table dynamique. Pour les colonnes qui sont des expressions, vous devez spécifier des alias pour les colonnes dans l’instruction SELECT.
Vous devez vous assurer que le suivi des modifications est activé pour tous les objets utilisés par la requête de table dynamique. Consultez Tables dynamiques et suivi des modifications dans cette rubrique pour plus de détails.
Note
Si la requête dépend d’une autre table dynamique, consultez Comment les données sont-elles actualisées lorsque des tables dynamiques dépendent d’autres tables dynamiques ? pour obtenir des conseils sur le choix de la latence cible.
Notez également que la TARGET_LAG minimale pour toute table dynamique est d’une minute.
Privilèges requis pour la création de tables dynamiques¶
Pour créer une table dynamique, vous devez disposer des privilèges suivants :
USAGE sur la base de données et le schéma dans lesquels vous envisagez de créer la table.
CREATE DYNAMIC TABLE sur le schéma dans lequel vous prévoyez de créer la table.
SELECT sur les tables et les vues existantes que vous envisagez d’interroger pour la table dynamique.
USAGE sur l’entrepôt que vous comptez utiliser pour actualiser la table.
Pour interroger une table dynamique ou créer une table dynamique qui interroge une autre table dynamique, vous devez disposer des privilèges suivants :
SELECT sur la table dynamique.
Supprimer une table dynamique¶
Pour supprimer une table dynamique, vous pouvez utiliser des commandes Snowsight ou SQL.
- Snowsight
Dans Snowsight, ouvrez la page de détails de la table dynamique (instructions).
Dans le menu More situé dans le coin supérieur droit de la page, sélectionnez Drop.
- SQL
Utilisez la commande DROP DYNAMIC TABLE.
Par exemple, pour supprimer la table dynamique nommée
product
:
DROP DYNAMIC TABLE product;
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. |
Limitations de la table dynamique et fonctions prises en charge¶
Les tables dynamiques se distinguent des tables classiques par le fait que certaines constructions de requêtes et certaines fonctions sont autorisées. En outre, l’optimisation de la recherche, le clustering et le service d’accélération des requêtes (QAS) ne sont pas pris en charge. Les sections suivantes décrivent ces limitations.
Constructions de requête non prises en charge actuellement dans les tables dynamiques¶
Les constructions suivantes ne sont actuellement pas prises en charge dans la requête pour une table dynamique. Si vous les indiquez dans la requête d’une table dynamique, une erreur se produit.
Fonctions externes
Fonctions non déterministes (à l’exception de celles énumérées à l’adresse Fonctions non déterministes prises en charge dans les tables dynamiques)
Sources qui incluent les tables externes, les flux et les vues matérialisées
Vues sur des tables dynamiques ou d’autres objets non pris en charge
Fonctions non déterministes prises en charge dans les tables dynamiques¶
Les fonctions non déterministes suivantes sont prises en charge dans les tables dynamiques. Notez que ces fonctions ne sont prises en charge que pour les actualisations complètes.
Fonctions définies par l’utilisateur VOLATILE
Fonctions séquentielles (par exemple SEQ1, SEQ2)
Les fonctions contextuelles suivantes :
Les fonctions de date et d’heure suivantes (ainsi que leurs alias respectifs) :
Tables dynamiques et suivi des modifications¶
Les tables dynamiques sont mises à jour lorsque les objets de la base de données sous-jacente changent. Le suivi des modifications doit être activé pour tous les objets sous-jacents utilisés par une table dynamique.
Snowflake tentera d’activer le suivi des modifications sur tous les objets sous-jacents lorsqu’une table dynamique est créée. Toutefois, l’utilisateur qui crée la table dynamique pourrait ne pas disposer des privilèges suffisants pour activer le suivi des modifications sur tous les objets sous-jacents.
Pour éviter les erreurs lors de l’actualisation des tables dynamiques, utilisez les commandes SHOW VIEWS, SHOW TABLES, et d’autres commandes similaires et examinez la colonne CHANGE_TRACKING pour déterminer si le suivi des modifications est activé pour un objet spécifique de la base de données.
Utilisez ALTER TABLE, ALTER VIEW, et la documentation associée pour activer le suivi des modifications sur un objet spécifique de la base de données.