CREATE DYNAMIC TABLE¶
Crée une table dynamique, sur la base d’une requête spécifiée.
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>' ]
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>
]
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 colonnetext
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;
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;
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;
Dans l’exemple ci-dessus :
La table dynamique matérialise les résultats d’une requête sur les colonnes
product_id
etproduct_name
de la tablestaging_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'));