ALTER DYNAMIC TABLE¶
Modifie les propriétés d’un tableau dynamique.
Dans ce chapitre :
Syntaxe¶
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { SUSPEND | RESUME }
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SWAP WITH <target_dynamic_table_name>
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> REFRESH
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { clusteringAction }
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { tableColumnCommentAction }
ALTER DYNAMIC TABLE <name> { SET | UNSET } COMMENT = '<string_literal>'
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> dataGovnPolicyTagAction
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> searchOptimizationAction
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SET
[ TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM } ]
[ WAREHOUSE = <warehouse_name> ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> UNSET
[ DATA_RETENTION_TIME_IN_DAYS ],
[ MAX_DATA_EXTENSION_TIME_IN_DAYS ],
[ DEFAULT_DDL_COLLATION ]
Où :
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }Pour plus d’informations, voir Clés de clustering et tables en cluster.
tableCommentAction ::= { ALTER | MODIFY [ ( ] [ COLUMN ] <col1_name> COMMENT '<string>' , [ COLUMN ] <col1_name> UNSET COMMENT [ , ... ] [ ) ] }dataGovnPolicyTagAction ::= { ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ROW ACCESS POLICY <policy_name> | DROP ROW ACCESS POLICY <policy_name> , ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ALL ROW ACCESS POLICIES } | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ] | UNSET MASKING POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ] } | { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] }searchOptimizationAction ::= { ADD SEARCH OPTIMIZATION [ ON <search_method_with_target> [ , <search_method_with_target> ... ] [ EQUALITY ] ] | DROP SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ EQUALITY ] [ , ... ] ] | SUSPEND SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] | RESUME SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] }Pour plus de détails, voir Actions d’optimisation de la recherche (searchOptimizationAction).
Paramètres¶
name
Identificateur de la table dynamique à modifier.
Si l’identificateur contient des espaces ou des caractères spéciaux, toute la chaîne doit être délimitée par des guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse.
Pour plus d’informations, voir Exigences relatives à l’identificateur.
SUSPEND | RESUME
Spécifie l’action à effectuer sur la table dynamique :
SUSPEND
suspend l’actualisation de la table dynamique. Si la table dynamique est utilisée par d’autres tables dynamiques, celles-ci sont également suspendues.RESUME
reprend l’actualisation de la table dynamique. Les opérations de reprise se répercutent en aval sur toutes les tables dynamiques en aval qui n’ont pas été suspendues manuellement.
RENAME TO new_name
Renomme la table dynamique spécifiée à l’aide d’un nouvel identificateur qui n’est actuellement utilisé par aucune autre table dynamique du schéma.
Pour renommer une table dynamique, il convient de disposer du privilège CREATE DYNAMIC TABLE sur le schéma de la table dynamique.
Vous pouvez également déplacer la table dynamique vers une autre base de données et/ou un autre schéma, tout en renommant éventuellement la table dynamique. Pour ce faire, spécifiez une valeur
new_name
qualifiée qui inclut le nouveau nom de la base de données et/ou du schéma sous la formedb_name.schema_name.new_name
ouschema_name.new_name
, respectivement.Les restrictions suivantes s’appliquent :
La base de données et/ou le schéma de destination doivent déjà exister. En outre, un objet portant le même nom ne peut pas déjà exister dans le nouvel emplacement ; sinon, l’instruction renvoie une erreur.
Vous ne pouvez pas déplacer un objet vers un schéma d’accès géré, sauf si le propriétaire de l’objet (c’est-à-dire le rôle qui a le privilège OWNERSHIP sur l’objet) est également propriétaire du schéma cible.
Lorsqu’un objet (table, colonne, etc.) est renommé, les autres objets qui le référencent doivent être mis à jour avec le nouveau nom.
SWAP WITH target_dynamic_table_name
Échange deux tables dynamiques en une seule transaction. Le rôle utilisé pour effectuer cette opération doit disposer des privilèges OWNERSHIP sur la ou les tables dynamiques.
Les restrictions suivantes s’appliquent :
Vous ne pouvez échanger une table dynamique qu’avec une autre table dynamique.
REFRESH
Spécifie que la table dynamique doit être actualisée manuellement.
Les tables dynamiques suspendues par l’utilisateur et celles suspendues automatiquement peuvent être actualisées manuellement. Les tables dynamiques actualisées manuellement renvoient MANUAL comme sortie pour
refresh_trigger
dans la fonction DYNAMIC_TABLE_REFRESH_HISTORY.Notez que l’actualisation d’une table dynamique actualise également toutes les tables dynamiques en amont à partir du même horodatage de données. Pour plus d’informations, voir Modifier l’entrepôt ou la latence cible pour une table dynamique.
Pour des informations sur le statut d’actualisation des tables dynamiques, voir DYNAMIC_TABLE_REFRESH_HISTORY.
SET ...
Spécifie un(e) ou plusieurs paramètre(s)/propriété(s) à définir pour la table (séparés par des espaces, des virgules ou de nouvelles lignes) :
TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }
Spécifie la latence cible 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 une table dynamique A dépend d’une autre table dynamique B, la latence minimale de la table A doit être supérieure ou égale à la latence de la table B.
DOWNSTREAM
Spécifie que la table dynamique doit être actualisée si une table dynamique en aval est actualisée.
WAREHOUSE = warehouse_name
Spécifie le nom de l’entrepôt qui fournit les ressources de calcul pour l’actualisation de la table dynamique.
Le rôle de propriétaire de la table dynamique doit avoir le privilège USAGE sur cet entrepôt.
DATA_RETENTION_TIME_IN_DAYS = integer
Paramètre au niveau de l’objet qui modifie la période de conservation de la table dynamique pour Time Travel. Pour plus de détails, voir Compréhension et utilisation de la fonction Time Travel et Utilisation de tables temporaires et transitoires.
Pour une description détaillée de ce paramètre, ainsi que pour plus d’informations sur les paramètres d’objet, voir Paramètres.
Valeurs :
Édition Standard :
0
ou1
Édition Enterprise :
De
0
à90
pour les tables dynamiques permanentesDe
0
ou1
pour les tables dynamiques transitoires
Note
Une valeur de
0
désactive effectivement Time Travel pour la table dynamique.MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
Paramètre d’objet qui spécifie le nombre maximum de jours pendant lesquels Snowflake peut prolonger la période de conservation des données de la table dynamique, afin d’éviter que les flux sur la table dynamique ne deviennent obsolètes.
Pour une description détaillée de ce paramètre, voir MAX_DATA_EXTENSION_TIME_IN_DAYS.
DEFAULT_DDL_COLLATION = 'collation_specification'
Indique une spécification de classement par défaut pour toutes les nouvelles colonnes ajoutées à la table dynamique.
La définition de ce paramètre ne modifie pas la spécification de classement des colonnes existantes.
Pour plus d’informations, voir DEFAULT_DDL_COLLATION.
UNSET ...
Spécifie plusieurs paramètres ou propriétés à désactiver pour la table dynamique, ce qui les réinitialise à leurs valeurs par défaut :
DATA_RETENTION_TIME_IN_DAYS
MAX_DATA_EXTENSION_TIME_IN_DAYS
DEFAULT_DDL_COLLATION
Actions de clustering (clusteringAction
)¶
CLUSTER BY ( expr [ , expr , ... ] )
Spécifie (ou modifie) une ou plusieurs colonnes de table ou expressions de colonne comme clé de clustering pour la table dynamique. Ce sont les colonnes/expressions pour lesquelles le clustering est assuré par le clustering automatique. Avant de spécifier une clé de clustering pour une table dynamique, vous devez comprendre ce que sont les micro-partitions. Pour plus d’informations, voir Fonctionnement des structures de table dans Snowflake.
Notez les points suivants lors de l’utilisation de clés de clustering avec des tables dynamiques :
Les définitions des colonnes sont obligatoires et doivent être explicitement spécifiées dans l’instruction.
Les clés de clustering ne sont pas prévues ni recommandées pour toutes les tables ; elles sont généralement intéressantes pour les tables de très grande taille (par exemple, de plusieurs téraoctets).
SUSPEND | RESUME RECLUSTER
Active ou désactive Clustering automatique pour la table dynamique.
DROP CLUSTERING KEY
Supprime la clé de clustering pour la table dynamique.
Pour plus d’informations sur les clés de clustering et le reclustering à proprement parler, voir Fonctionnement des structures de table dans Snowflake.
Actions de commentaire de table (tableCommentAction
)¶
ALTER | MODIFY [ ( ]
` .[ COLUMN ] <col1_name> COMMENT '<string>'
., [ COLUMN ] <col1_name> UNSET COMMENT
.[ , ... ]
.[ ) ]
Modifie un commentaire ou écrase le commentaire existant pour une colonne dans la table dynamique.
SET | UNSET COMMENT = '<string_literal>'
Ajoute un commentaire ou écrase le commentaire existant pour la table dynamique.
Politique de gouvernance des données et actions de balises (dataGovnPolicyTagAction
)¶
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
Spécifie le nom de la balise et la valeur de la chaîne de la balise.
La valeur de la balise est toujours une chaîne de caractères et le nombre maximum de caractères pour la valeur de la balise est 256.
Pour plus d’informations sur la spécification des balises dans une instruction, voir Quotas de balises pour les objets et les colonnes.
policy_name
Identificateur de la politique ; doit être unique pour votre schéma.
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
Ajouter la politique d’accès aux lignes à la table dynamique.
Au moins un nom de colonne doit être spécifié. Des colonnes supplémentaires peuvent être spécifiées en séparant chaque nom de colonne par une virgule.
DROP ROW ACCESS POLICY policy_name
Supprime une politique d’accès aux lignes de la table dynamique.
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
Supprime la politique d’accès aux lignes définie sur la table dynamique et ajoute une politique d’accès aux lignes pour la même table dynamique en une seule instruction SQL.
DROP ALL ROW ACCESS POLICIES
Supprime toutes les associations de politique d’accès aux lignes d’une table dynamique.
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
Spécifie les arguments à passer dans la politique de masquage conditionnelle.
La première colonne de la liste spécifie les données à masquer ou à tokeniser en fonction des conditions de politique et doit correspondre à la colonne à laquelle la politique de masquage est appliquée.
Les colonnes supplémentaires spécifient les données à évaluer pour le masquage ou la tokenisation dans chaque ligne du résultat de la requête lors de la sélection dans la première colonne.
Si la clause USING est omise, Snowflake traite la politique de masquage conditionnelle comme une politique de masquage normale.
FORCE
Remplace une politique de masquage ou de projection actuellement définie sur une colonne par une politique différente dans une seule instruction.
Notez que l’utilisation du mot-clé
FORCE
avec une politique de masquage exige que le type de données de la politique dans l’instruction ALTER DYNAMIC TABLE (c’est-à-dire STRING) corresponde au type de données de la politique de masquage actuellement définie sur la colonne (c’est-à-dire STRING).Si aucune politique de masquage n’est actuellement définie sur la colonne, la spécification de ce mot-clé n’a aucun effet.
Pour plus de détails, voir : Remplacez une politique de masquage sur une colonne ou Remplacement d’une politique de projection.
Actions d’optimisation de la recherche (searchOptimizationAction
)¶
ADD SEARCH OPTIMIZATION
Ajoute l’optimisation de recherche pour la table dynamique entière ou, si vous spécifiez la clause
ON
facultative, pour des colonnes spécifiques.L’optimisation de la recherche peut être coûteuse à maintenir, en particulier si les données du tableau changent fréquemment. Pour plus d’informations, voir Optimisation de la recherche - Estimation et gestion des coûts.
ON search_method_with_target [, search_method_with_target ... ]
Spécifie que vous voulez configurer l’optimisation de la recherche pour des colonnes ou des champs VARIANT spécifiques (plutôt que pour la table dynamique entière).
Pour
search_method_with_target
, utilisez une expression avec la syntaxe suivante :<search_method>(<target> [, ...])
Où :
search_method
spécifie l’une des méthodes suivantes qui optimisent les requêtes pour un type particulier de prédicat :GEO
: prédicats qui utilisent des types GEOGRAPHY.SUBSTRING
: prédicats qui correspondent à des sous-chaînes et à des expressions régulières (par exemple, [ NOT ] LIKE, [ NOT ] ILIKE, [ NOT ] RLIKE, REGEXP_LIKE, etc.)EQUALITY
: prédicats d’égalité et IN
target
spécifie la colonne, le champ VARIANT ou un astérisque (*).En fonction de la valeur de
search_method
, vous pouvez spécifier une colonne ou un champ VARIANT de l’un des types suivants :GEO
: colonnes du type de données GEOGRAPHY.SUBSTRING
: colonnes de types de données chaîne ou VARIANT, y compris les chemins d’accès aux champs dans les VARIANTs. Spécifiez les chemins d’accès aux champs comme décrit sousEQUALITY
; les recherches sur les champs imbriqués sont améliorées de la même manière.EQUALITY
: colonnes de types de données numérique, chaîne, binaire et VARIANT, y compris les chemins d’accès aux champs dans les colonnes VARIANT.Pour spécifier un champ VARIANT, utilisez le point ou la notation entre crochets. Par exemple :
my_column:my_field_name.my_nested_field_name
my_column['my_field_name']['my_nested_field_name']
Vous pouvez également utiliser un chemin d’accès au champ délimité par deux points. Par exemple :
my_column:my_field_name:my_nested_field_name
Lorsque vous spécifiez un champ VARIANT, la configuration s’applique à tous les champs imbriqués sous ce champ.
Par exemple, si vous spécifiez
ON EQUALITY(src:a.b)
:Cette configuration peut améliorer les requêtes
on src:a.b
et sur tous les champs imbriqués (par exemplesrc:a.b.c
,src:a.b.c.d
, etc.).Cette configuration affecte uniquement les requêtes qui utilisent le préfixe
src:a.b
(par exemple,src:a
,src:z
, etc.).
Pour spécifier toutes les colonnes applicables de la tableau comme cibles, utilisez un astérisque (
*
).Notez que vous ne pouvez pas spécifier à la fois un astérisque et des noms de colonnes spécifiques pour une méthode de recherche donnée. Cependant, vous pouvez spécifier un astérisque dans différentes méthodes de recherche.
Par exemple, vous pouvez spécifier les expressions suivantes :
ON SUBSTRING(*) ON EQUALITY(*), SUBSTRING(*), GEO(*)
Vous ne pouvez pas spécifier les expressions suivantes :
ON EQUALITY(*, c1) ON EQUALITY(c1, *) ON EQUALITY(v1:path, *) ON EQUALITY(c1), EQUALITY(*)
Pour spécifier plus d’une méthode de recherche sur une cible, utilisez une virgule pour séparer chaque méthode ultérieure et chaque cible :
ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
Si vous exécutez la commande ALTER DYNAMIC TABLE … ADD SEARCH OPTIMIZATION ON … sur la même table, chaque commande suivante s’ajoute à la configuration existante pour la table. Par exemple, supposons que vous exécutez les commandes suivantes :
ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2); ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
Cela ajoute des prédicats d’égalité pour les colonnes
c1
,c2
,c3
etc4
à la configuration de la table. Ceci est équivalent à l’exécution de la commande :ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
Pour des exemples, voir Configuration de l’optimisation de la recherche pour des colonnes spécifiques.
DROP SEARCH OPTIMIZATION
Supprime l’optimisation de recherche pour l’ensemble de la table dynamique ou, si vous spécifiez la clause
ON
facultative, pour des colonnes spécifiques.Les restrictions suivantes s’appliquent :
Si une table dynamique a la propriété d’optimisation de recherche, alors le fait de supprimer et de rétablir la table dynamique préserve la propriété d’optimisation de recherche.
La suppression de la propriété d’optimisation de recherche d’une table dynamique puis son rétablissement entraînent le même coût que lors du premier ajout.
ON search_method_with_target | column_name | expression_id [, ... ]
Spécifie que vous voulez détruire la configuration de l’optimisation de la recherche pour des colonnes ou des champs VARIANT spécifiques (plutôt que de détruire l’optimisation de la recherche pour la table dynamique entière).
Pour identifier la configuration de la colonne à détruire, spécifiez l’un des éléments suivants :
Pour
search_method_with_target
, spécifiez une méthode d’optimisation des requêtes pour une ou plusieurs cibles spécifiques, qui peuvent être des colonnes ou des champs VARIANT. Utilisez la syntaxe décrite précédemment.Pour
column_name
, spécifiez le nom de la colonne configurée pour l’optimisation de la recherche. La spécification du nom de la colonne détruit toutes les expressions pour cette colonne, y compris les expressions qui utilisent les champs VARIANT de la colonne.Pour
expression_id
, spécifiez l’ID d’une expression figurant dans la sortie de la commande DESCRIBE SEARCH OPTIMIZATION.
Vous pouvez spécifier toute combinaison de méthodes de recherche avec des cibles, des noms de colonnes et des IDs d’expressions en séparant les éléments par une virgule.
Pour des exemples, voir Suppression de l’optimisation de la recherche pour des colonnes spécifiques.
Notes sur l’utilisation¶
Pour modifier une table dynamique, vous devez utiliser un rôle disposant du privilège OPERATE sur cette table dynamique. Pour des informations générales, voir Privilèges permettant d’afficher les métadonnées d’une table dynamique.
Vous ne pouvez pas modifier la politique de masquage après avoir créé la table dynamique.
Si vous souhaitez mettre à jour une table dynamique existant et que vous avez besoin de voir sa définition actuelle, appelez la fonction GET_DDL.
Vous pouvez utiliser des fonctions de métriques des données avec des tables dynamiques en exécutant une commande ALTER TABLE. Pour plus d’informations, voir Utilisation de fonctions de métrique des données.
Vous ne pouvez pas utiliser IDENTIFIER() pour spécifier le nom de la table dynamique à modifier. Par exemple, l’instruction suivante n’est pas prise en charge :
ALTER DYNAMIC TABLE IDENTIFIER(product) SUSPEND;
Concernant les métadonnées :
Attention
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¶
Modifiez le temps de latence cible d’une table dynamique nommée product
sur 1 heure :
ALTER DYNAMIC TABLE product SET TARGET_LAG = '1 hour';
Spécifiez la latence cible en aval d’une table dynamique pour une table dynamique nommée product
:
ALTER DYNAMIC TABLE product SET TARGET_LAG = DOWNSTREAM;
Suspendez la table dynamique product
:
ALTER DYNAMIC TABLE product SUSPEND;
Reprenez la table dynamique product
:
ALTER DYNAMIC TABLE product RESUME;
Renommez la table dynamique product
:
ALTER DYNAMIC TABLE product RENAME TO updated_product;
Échangez la table dynamique product
avec new-product
:
ALTER DYNAMIC TABLE product SWAP WITH new_product;
Modifiez la clé de clustering d’une table :
ALTER DYNAMIC TABLE product CLUSTER BY (date);
Supprimez le clustering d’une table :
ALTER DYNAMIC TABLE product DROP CLUSTERING KEY;