À propos de la gestion des tables dynamiques

La gestion des tables dynamiques implique généralement les tâches suivantes :

Tâche

Description

Répertorier les tables dynamiques et afficher des informations sur une table dynamique

Énumération et vue des tables dynamiques.

Supprimer une table dynamique

Suppression des tables dynamiques.

Modifier l’entrepôt ou la latence cible pour une table dynamique

Modification des tables dynamiques.

Répertorier les tables dynamiques et afficher des informations sur une table dynamique

Pour dresser la liste des tables dynamiques d’une base de données et voir les informations relatives à ces tables dynamiques, vous pouvez utiliser les commandes Snowsight ou SQL :

Utiliser Snowsight pour afficher des tables dynamiques et voir des détails

Pour afficher les tables dynamiques d’un schéma et voir les informations relatives à une table dynamique :

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Data » Databases.

  3. Sélectionnez une base de données et un schéma.

  4. Sur l”Schema Details, sélectionnez l’onglet Dynamic Tables.

    Notez que vous pouvez également voir la liste des tables dynamiques dans l’explorateur d’objets de la base de données en développant Dynamic Tables.

  5. Pour voir les informations sur une table dynamique spécifique, sélectionnez la table dynamique dans l’explorateur d’objets de la base de données ou dans la liste des tables dynamiques de l’onglet Dynamic Tables.

    Les onglets de cette page fournissent certaines des mêmes informations que la page de détails de la table, y compris :

    • La définition de la table dynamique et les privilèges accordés pour travailler avec la table dynamique

    • Informations sur les colonnes de la table dynamique

    • Un aperçu de 100 lignes maximum des données de la table dynamique

    En outre, la page de détails de la table dynamique comprend des onglets que vous pouvez utiliser pour voir des informations sur la table dynamique :

Utiliser des commandes SQL pour afficher des tables dynamiques et voir les détails

  • Pour dresser la liste des tables dynamiques de la base de données actuelle (ou du compte, si aucune base de données n’est actuellement utilisée), utilisez la commande SHOW DYNAMIC TABLES.

    Par exemple, pour répertorier les tables dynamiques dont les noms commencent par product_ dans la base de données mydb et le schéma myschema, exécutez l’instruction SQL suivante :

    SHOW DYNAMIC TABLES LIKE 'product_%' IN SCHEMA mydb.myschema;
    
    Copy

    Pour la syntaxe complète de la commande, voir SHOW DYNAMIC TABLES.

  • Pour obtenir des informations sur les colonnes d’une table dynamique, utilisez la commande DESCRIBE DYNAMIC TABLE.

    Par exemple, pour dresser la liste des colonnes de la table dynamique nommée product :

    DESC DYNAMIC TABLE product;
    
    Copy

Les tableaux dynamiques sont également inclus dans les résultats de la Vue TABLES.

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

Partage de données avec des tables dynamiques

Les tables dynamiques sont des objets partageables. Pour partager une table dynamique, les fournisseurs de partage de données accordent des privilèges sur une table dynamique à un partage, qui peut à son tour être utilisée par les consommateurs de partage de données.

Comment les données sont-elles partagées avec les tables dynamiques ?

Les fournisseurs peuvent partager des tables dynamiques sélectionnées avec d’autres comptes Snowflake en utilisant les partages directs ou les annonces, qui permettent de partager des données entre comptes sans les déplacer physiquement. Le processus consiste à créer un partage d’une base de données dans le compte du fournisseur, à accorder l’accès à la base de données dans le compte du fournisseur, à accorder des privilèges d’accès et à ajouter d’autres objets au partage. Pour en savoir plus, voir À propos de Secure Data Sharing et Vue d’ensemble du partage des données et de la collaboration dans Snowflake.

Un fournisseur de partage de données peut choisir d’accorder le privilège SELECT à une seule table dynamique ou d’accorder le privilège SELECT à toutes les tables dynamiques d’une base de données, comme le montrent les exemples suivants.

GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA mydb.public TO SHARE share1;

GRANT SELECT ON DYNAMIC TABLE mydb.public TO SHARE share1;
Copy

Pour plus de détails, voir GRANT <privilège> … TO SHARE.

Créer une table dynamique pour ingérer des données partagées

Pour créer une table dynamique afin d’ingérer des données partagées, procédez comme suit :

  1. Assurez-vous que vous disposez des privilèges appropriés, créez une base de données à partir d’un partage et accordez-lui des privilèges.

    CREATE DATABASE shared_db FROM SHARE provider_account.share1;
    
    Copy
  2. Accordez les privilèges à la base de données partagée.

  3. Créez une table dynamique partagée.

    CREATE OR REPLACE DYNAMIC TABLE <dt_name>
      TARGET_LAG = '1 day'
      WAREHOUSE = <warehouse_name>
      AS
        SELECT * FROM shared_db.public.mydb;
    
    Copy

    Note

    Le suivi des modifications doit être activé pour tous les objets sous-jacents utilisés par une table dynamique. Pour utiliser une table dynamique afin d’ingérer des données partagées, le fournisseur de partage de données doit activer change_tracking sur l’objet partagé. Voir Activer le suivi des modifications.

Lorsque vous utilisez une table dynamique pour intégrer des données partagées, la requête ne peut pas effectuer de sélection à partir d’une table dynamique partagée ou d’une vue sécurisée partagée faisant référence à une table dynamique en amont.

Modifier l’entrepôt ou la latence cible pour une table dynamique

Pour modifier l’entrepôt ou la latence cible d’une table dynamique, utilisez la commande ALTER DYNAMIC TABLE.

Par exemple, pour modifier l’entrepôt de la table dynamique product en my_other_wh, exécutez ceci :

ALTER DYNAMIC TABLE product SET
  WAREHOUSE = my_other_wh;
Copy

Le diagramme suivant illustre les opérations de suspension, de reprise et d’actualisation manuelle dans le contexte des relations en amont et en aval avec d’autres tables dynamiques.

Relation entre les tables dynamiques. Utilisé pour expliquer les notions de suspension, de reprise et d'actualisation manuelle.

Le diagramme représente un pipeline de données déclaratif simple construit avec des tables dynamiques. Comme l’eau qui coule dans un ruisseau, les données d’un pipeline de table dynamique s’écoulent de la racine vers l’aval, en direction de la table dynamique feuille :

  • DT2 est décrite comme en aval de DT1 parce qu’elle dépend de cette table dynamique, et comme en amont de DT3, qui en dépend.

  • DT3 est en aval de DT2 et DT1, car elle dépend directement de DT2 et indirectement de DT1.

  • DT1 est directement ou indirectement en amont des autres tables dynamiques.

Pour plus de détails et d’exemples sur l’utilisation de la latence cible en aval, voir Comprendre la latence cible.

Déterminer la latence cible optimale pour une table dynamique

Pour déterminer le temps de latence cible optimal pour une table dynamique, vous pouvez utiliser les commandes Snowsight ou SQL.

Snowsight:
  1. Sur la page de détails des tables dynamiques, sélectionnez l’onglet Refresh History.

  2. Vérifiez le temps de latence réel maximum, qui est affiché en haut de l’onglet. Cette mesure est basée sur le temps de latence réel pour chaque actualisation.

SQL:
  • Utilisez la fonction de la table DYNAMIC_TABLE_REFRESH_HISTORY dans INFORMATION_SCHEMA. Cette fonction renvoie des informations sur chaque actualisation d’une table dynamique, y compris la durée de l’actualisation et les actualisations qui ont été ignorées.

Le temps de latence que vous choisissez peut affecter le calendrier d’actualisation déterminé par le processus d’actualisation automatisé. Le processus d’actualisation automatisé choisit un calendrier qui respecte au mieux les temps de latence des tables dynamiques.

Déterminer si une actualisation incrémentielle ou complète est utilisée

Pour déterminer si une actualisation incrémentielle ou complète est utilisée pour mettre à jour une table dynamique, vous pouvez utiliser des commandes Snowsight ou SQL.

Snowsight:
  • Allez à la page de détails de la table dynamique.

    Les détails de base en haut de la page indiquent si des actualisations incrémentielles ou complètes sont utilisées pour cette table.

SQL:
  • Utilisez la commande SHOW DYNAMIC TABLES et vérifiez la valeur de la colonne REFRESH_MODE dans la sortie.

    REFRESH_MODE_REASON contient des détails supplémentaires sur le choix de REFRESH_MODE.

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 FAILED. La table dynamique doit être recréée pour tenir compte de la modification.

Présentation du comportement de la suspension automatique

Note

Une table dynamique est suspendue si le système observe cinq erreurs continues d’actualisation. Les tables dynamiques suspendues en raison d’erreurs d’actualisation sont communément appelées suspendues automatiquement car elles sont suspendues par le système et non par une action de l’utilisateur.

Toutes les tables dynamiques qui dépendent de la table dynamique suspendue sont également suspendues. SCHEDULING_STATE décrit l’état actuel d’une table dynamique.

  • Pour voir l’état de planification de la table dynamique, appelez la fonction de table DYNAMIC_TABLE_GRAPH_HISTORY et examinez la colonne SCHEDULING_STATE.