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éer une table dynamique

Création de tables dynamiques, y compris de privilèges requis pour créer une table dynamique.

Supprimer 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.

Tables dynamiques et suivi des modifications

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 table staging_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;
Copy

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
  1. Dans Snowsight, ouvrez la page de détails de la table dynamique (instructions).

  2. 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;
Copy

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.

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 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.

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.