CREATE DYNAMIC TABLE

Crée une table dynamique, sur la base d’une requête spécifiée.

Voir aussi :

ALTER DYNAMIC TABLE, DESCRIBE DYNAMIC TABLE, DROP DYNAMIC TABLE , SHOW DYNAMIC TABLES

Dans ce chapitre :

Syntaxe

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  [ ( <column_list> ) ]
  TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
  WAREHOUSE = <warehouse_name>
  REFRESH_MODE = { AUTO | FULL | INCREMENTAL }
  INITIALIZE = { ON_CREATE | ON_SCHEDULE }
  AS <query>
  [ COMMENT = '<string_literal>' ]
Copy

Syntaxe des variantes

CREATE DYNAMIC TABLE … CLONE

Crée une nouvelle table dynamique avec les mêmes définitions de colonnes et contenant toutes les données existantes de la table dynamique source, sans réellement copier les données. Cette variante peut également être utilisée pour cloner une table dynamique à un moment précis dans le passé. Voir Remarques relatives au clonage.

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  CLONE <source_dynamic_table>
        [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
  [
    TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
    WAREHOUSE = <warehouse_name>
  ]
Copy

Pour plus de détails sur le clonage, voir CREATE <objet> … CLONE.

Paramètres requis

name

Indique l’identificateur (c’est-à-dire le nom) de la table dynamique ; doit être unique pour le schéma dans lequel la table dynamique est créée.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex. "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails, voir Exigences relatives à l’identificateur.

TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }

Spécifie le décalage de la table dynamique :

'num seconds | minutes | hours | days'

Spécifie le délai maximum pendant lequel le contenu de la table dynamique doit être décalé par rapport aux mises à jour des tables de base.

Par exemple :

  • Si les données de la table dynamique ne doivent pas être décalées de plus de 5 minutes, indiquez 5 minutes.

  • Si les données de la table dynamique ne doivent pas être décalées de plus de 5 heures, indiquez 5 hours.

La valeur minimale est de 1 minute. Si la table dynamique A dépend d’une autre table dynamique B, le décalage minimum pour A doit être supérieur ou égal au décalage pour B.

DOWNSTREAM

Spécifie que la table dynamique ne doit être actualisé que lorsque les tables dynamiques qui en dépendent sont actualisés.

WAREHOUSE = warehouse_name

Spécifie le nom de l’entrepôt qui fournit les ressources de calcul pour l’actualisation de la table dynamique.

Vous devez disposer du privilège USAGE sur cet entrepôt pour pouvoir créer la table dynamique.

REFRESH_MODE = { AUTO | FULL | INCREMENTAL }

Spécifie le type d’actualisation pour la table dynamique. Cette propriété ne peut pas être modifiée après la création de la table dynamique. Pour modifier la propriété, répliquez la table dynamique avec une commande CREATE OR REPLACE DYNAMIC TABLE.

AUTO

Par défaut, la table dynamique est actualisée de manière incrémentielle. Si l’instruction CREATE DYNAMIC TABLE ne prend pas en charge le mode d’actualisation incrémentiel, la table dynamique est automatiquement créée avec le mode d’actualisation complet.

Vous pouvez vérifier le mode d’actualisation à l’aide de l’instruction SHOW DYNAMIC TABLES. La colonne refresh_mode indique le mode d’actualisation utilisé, tandis que la colonne text indique le mode d’actualisation spécifié par l’utilisateur.

FULL

Impose une actualisation complète de la table dynamique, même si celle-ci peut être actualisée de manière incrémentielle.

INCREMENTAL

Permet une actualisation incrémentielle de la table dynamique. Si la requête qui sous-tend la table dynamique ne peut pas effectuer une actualisation incrémentielle, la création de la table dynamique échoue et affiche un message d’erreur.

Par défaut : AUTO

INITIALIZE

Spécifie le comportement de l’actualisation initiale de la table dynamique. Cette propriété ne peut pas être modifiée après la création de la table dynamique. Pour modifier la propriété, répliquez la table dynamique avec une commande CREATE OR REPLACE DYNAMIC TABLE.

ON_CREATE

Actualise la table dynamique de manière synchrone lors de sa création.

ON_SCHEDULE

Actualise la table dynamique lors de la prochaine actualisation planifiée.

La table dynamique est alimentée lors de l’exécution du processus de planification de l’actualisation. Aucune donnée n’est ajoutée lors de la création de la table dynamique. Si vous essayez d’interroger la table en utilisant SELECT * FROM DYNAMIC TABLE, vous risquez d’obtenir l’erreur suivante, car la première actualisation planifiée n’a pas encore eu lieu.

Par défaut : ON_CREATE

AS query

Spécifie la requête dont les résultats doivent être contenus dans la table dynamique.

Paramètres facultatifs

COMMENT = 'string_literal'

Spécifie un commentaire pour la table dynamique.

Par défaut : aucune valeur.

column_list

Si vous voulez modifier le nom d’une colonne ou ajouter un commentaire à une colonne dans la table dynamique, incluez une liste de colonnes qui spécifie les noms des colonnes et, le cas échéant, les commentaires sur les colonnes. Vous n’avez pas besoin de spécifier les types de données des colonnes.

Si l’une des colonnes de la table dynamique est basée sur des expressions (pas seulement des noms de colonnes simples, par exemple), vous devez fournir un nom de colonne pour chaque colonne de la table dynamique. Par exemple, les noms de colonnes sont obligatoires dans le cas suivant :

CREATE DYNAMIC TABLE product (pre_tax_profit, taxes, after_tax_profit)
  TARGET_LAG = '20 minutes'
    WAREHOUSE = mywh
    AS
      SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate)
      FROM staging_table;
Copy

Vous pouvez spécifier un commentaire facultatif pour chaque colonne. Par exemple :

CREATE DYNAMIC TABLE product (pre_tax_profit COMMENT 'revenue minus cost',
                taxes COMMENT 'assumes taxes are a fixed percentage of profit',
                after_tax_profit)
  TARGET_LAG = '20 minutes'
    WAREHOUSE = mywh
    AS
      SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate)
      FROM staging_table;
Copy

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette commande SQL doit avoir les privilèges suivants définis au minimum ainsi :

Privilège

Objet

Remarques

CREATE DYNAMIC TABLE

Schéma dans lequel vous prévoyez de créer la table dynamique.

SELECT

Tables, vues et tables dynamiques que vous prévoyez d’interroger pour la nouvelle table dynamique.

USAGE

Entrepôt que vous prévoyez d’utiliser pour actualiser la table.

Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Notes sur l’utilisation

  • Lorsque vous exécutez la commande CREATE DYNAMIC TABLE, le rôle en cours d’utilisation devient propriétaire de la table dynamique. Ce rôle est utilisé pour effectuer des actualisations de la table dynamique en arrière-plan.

  • 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. Voir Tables dynamiques et suivi des modifications.

  • Si vous souhaitez remplacer une table dynamique existant et que vous avez besoin de voir sa définition actuelle, appelez la fonction GET_DDL.

  • Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

Exemples

Créez une table dynamique nommée product :

CREATE OR REPLACE DYNAMIC TABLE product
 TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

Dans l’exemple ci-dessus :

  • La table dynamique matérialise les résultats d’une requête sur les colonnes product_id et product_name de la table staging_table.

  • Le temps de latence cible est de 20 minutes, ce qui signifie que les données de la table dynamique ne devraient idéalement pas être antérieures de plus de 20 minutes à celles de la staging_table.

  • Le processus d’actualisation automatisé utilise les ressources informatiques de l’entrepôt mywh pour actualiser les données de la table dynamique.

Cloner une table dynamique telle qu’elle existait exactement à la date et à l’heure de l’horodatage spécifié :

CREATE DYNAMIC TABLE orders_clone_restore CLONE orders AT (TIMESTAMP => TO_TIMESTAMP_TZ('04/05/2013 01:02:03', 'mm/dd/yyyy hh24:mi:ss'));
Copy