ALTER TABLE

Modifie les propriétés, les colonnes ou les contraintes d’une table existante.

Voir aussi :

ALTER TABLE … ALTER COLUMN , CREATE TABLE , DROP TABLE , SHOW TABLES , DESCRIBE TABLE

Syntaxe

ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_table_name>

ALTER TABLE [ IF EXISTS ] <name> SWAP WITH <target_table_name>

ALTER TABLE [ IF EXISTS ] <name> { clusteringAction | tableColumnAction | constraintAction  }

ALTER TABLE [ IF EXISTS ] <name> extTableColumnAction

ALTER TABLE [ IF EXISTS ] <name> searchOptimizationAction

ALTER TABLE [ IF EXISTS ] <name> SET
  [ STAGE_FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
  [ STAGE_COPY_OPTIONS = ( copyOptions ) ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ CHANGE_TRACKING = { TRUE | FALSE  } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ ENABLE_SCHEMA_EVOLUTION = { TRUE | FALSE } ]
  [ COMMENT = '<string_literal>' ]

ALTER TABLE [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER TABLE [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER TABLE [ IF EXISTS ] <name> UNSET {
                                       DATA_RETENTION_TIME_IN_DAYS         |
                                       MAX_DATA_EXTENSION_TIME_IN_DAYS     |
                                       CHANGE_TRACKING                     |
                                       DEFAULT_DDL_COLLATION               |
                                       ENABLE_SCHEMA_EVOLUTION             |
                                       COMMENT                             |
                                       }
                                       [ , ... ]
ALTER TABLE [ IF EXISTS ] <name>
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])

ALTER TABLE [ IF EXISTS ] <name>
  DROP ROW ACCESS POLICY <policy_name>

ALTER TABLE [ IF EXISTS ] <name>
  DROP ROW ACCESS POLICY <policy_name>,
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])

ALTER TABLE [ IF EXISTS ] <name> DROP ALL ROW ACCESS POLICIES
Copy

Où :

clusteringAction ::=
  {
     CLUSTER BY ( <expr> [ , <expr> , ... ] )
     /* RECLUSTER is deprecated */
   | RECLUSTER [ MAX_SIZE = <budget_in_bytes> ] [ WHERE <condition> ]
     /* { SUSPEND | RESUME } RECLUSTER is valid action */
   | { SUSPEND | RESUME } RECLUSTER
   | DROP CLUSTERING KEY
  }
Copy
tableColumnAction ::=
  {
     ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type>
        [
           {
              DEFAULT <default_value>
              | { AUTOINCREMENT | IDENTITY }
                 /* AUTOINCREMENT (or IDENTITY) is supported only for           */
                 /* columns with numeric data types (NUMBER, INT, FLOAT, etc.). */
                 /* Also, if the table is not empty (i.e. if the table contains */
                 /* any rows), only DEFAULT can be altered.                     */
                 [
                    {
                       ( <start_num> , <step_num> )
                       | START <num> INCREMENT <num>
                    }
                 ]
                 [  { ORDER | NOORDER } ]
           }
        ]
        [ inlineConstraint ]
        [ COLLATE '<collation_specification>' ]
        [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , cond_col_1 , ... ) ] ]
        [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
   | RENAME COLUMN <col_name> TO <new_col_name>

   | ALTER | MODIFY [ ( ]
                            [ COLUMN ] <col1_name> DROP DEFAULT
                          , [ COLUMN ] <col1_name> SET DEFAULT <seq_name>.NEXTVAL
                          , [ COLUMN ] <col1_name> { [ SET ] NOT NULL | DROP NOT NULL }
                          , [ COLUMN ] <col1_name> [ [ SET DATA ] TYPE ] <type>
                          , [ COLUMN ] <col1_name> COMMENT '<string>'
                          , [ COLUMN ] <col1_name> UNSET COMMENT
                        [ , [ COLUMN ] <col2_name> ... ]
                        [ , ... ]
                    [ ) ]

   | ALTER | MODIFY COLUMN <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , cond_col_1 , ... ) ]
                                                                        [ FORCE ]

   | ALTER | MODIFY COLUMN <col1_name> 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> ... ]
                    ...

   | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ]
  }

  inlineConstraint ::=
    [ NOT NULL ]
    [ CONSTRAINT <constraint_name> ]
    { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } }
    [ <constraint_properties> ]
Copy

Pour une syntaxe détaillée et des exemples pour modifier des colonnes, voir ALTER TABLE … ALTER COLUMN. .

Pour une syntaxe détaillée et des exemples de création/modification de contraintes en ligne, voir CREATE | ALTER TABLE … CONSTRAINT.

extTableColumnAction ::=
  {
     ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> AS ( <expr> )

   | RENAME COLUMN <col_name> TO <new_col_name>

   | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ]
  }
Copy
constraintAction ::=
  {
     ADD outoflineConstraint
   | RENAME CONSTRAINT <constraint_name> TO <new_constraint_name>
   | { ALTER | MODIFY } { CONSTRAINT <constraint_name> | PRIMARY KEY | UNIQUE | FOREIGN KEY } ( <col_name> [ , ... ] )
                         [ [ NOT ] ENFORCED ] [ VALIDATE | NOVALIDATE ] [ RELY | NORELY ]
   | DROP { CONSTRAINT <constraint_name> | PRIMARY KEY | UNIQUE | FOREIGN KEY } ( <col_name> [ , ... ] )
                         [ CASCADE | RESTRICT ]
  }

  outoflineConstraint ::=
    [ CONSTRAINT <constraint_name> ]
    {
       UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ]
     | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ]
     | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ]
                          REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ]
    }
    [ <constraint_properties> ]
Copy

Pour une syntaxe détaillée et des exemples de création/modification des contraintes hors ligne, voir CREATE | ALTER TABLE … CONSTRAINT.

searchOptimizationAction ::=
  {
     ADD SEARCH OPTIMIZATION [
       ON <search_method_with_target> [ , <search_method_with_target> ... ]
     ]

   | DROP SEARCH OPTIMIZATION [
       ON { <search_method_with_target> | <column_name> | <expression_id> }
          [ , ... ]
     ]

  }
Copy

Pour plus de détails, voir Actions d’optimisation de la recherche (searchOptimizationAction).

formatTypeOptions ::=
-- If TYPE = CSV
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     RECORD_DELIMITER = '<character>' | NONE
     FIELD_DELIMITER = '<character>' | NONE
     FILE_EXTENSION = '<string>'
     PARSE_HEADER = TRUE | FALSE
     SKIP_HEADER = <integer>
     SKIP_BLANK_LINES = TRUE | FALSE
     DATE_FORMAT = '<string>' | AUTO
     TIME_FORMAT = '<string>' | AUTO
     TIMESTAMP_FORMAT = '<string>' | AUTO
     BINARY_FORMAT = HEX | BASE64 | UTF8
     ESCAPE = '<character>' | NONE
     ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE
     TRIM_SPACE = TRUE | FALSE
     FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
     ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     EMPTY_FIELD_AS_NULL = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
     ENCODING = '<string>' | UTF8
-- If TYPE = JSON
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     DATE_FORMAT = '<string>' | AUTO
     TIME_FORMAT = '<string>' | AUTO
     TIMESTAMP_FORMAT = '<string>' | AUTO
     BINARY_FORMAT = HEX | BASE64 | UTF8
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
     FILE_EXTENSION = '<string>'
     ENABLE_OCTAL = TRUE | FALSE
     ALLOW_DUPLICATE = TRUE | FALSE
     STRIP_OUTER_ARRAY = TRUE | FALSE
     STRIP_NULL_VALUES = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     IGNORE_UTF8_ERRORS = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
-- If TYPE = AVRO
     COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     TRIM_SPACE = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = ORC
     TRIM_SPACE = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = PARQUET
     COMPRESSION = AUTO | LZO | SNAPPY | NONE
     SNAPPY_COMPRESSION = TRUE | FALSE
     BINARY_AS_TEXT = TRUE | FALSE
     USE_LOGICAL_TYPE = TRUE | FALSE
     TRIM_SPACE = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = XML
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     IGNORE_UTF8_ERRORS = TRUE | FALSE
     PRESERVE_SPACE = TRUE | FALSE
     STRIP_OUTER_ELEMENT = TRUE | FALSE
     DISABLE_SNOWFLAKE_DATA = TRUE | FALSE
     DISABLE_AUTO_CONVERT = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
Copy
copyOptions ::=
     ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_<num> | 'SKIP_FILE_<num>%' | ABORT_STATEMENT }
     SIZE_LIMIT = <num>
     PURGE = TRUE | FALSE
     RETURN_FAILED_ONLY = TRUE | FALSE
     MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE
     ENFORCE_LENGTH = TRUE | FALSE
     TRUNCATECOLUMNS = TRUE | FALSE
     FORCE = TRUE | FALSE
Copy

Paramètres

name

Identifiant de la table à 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.

RENAME TO new_table_name

Renomme la table spécifiée avec un nouvel identifiant qui n’est actuellement utilisé par aucune autre table du schéma.

Pour plus de détails sur les identificateurs de table, voir Exigences relatives à l’identificateur.

Vous pouvez déplacer l’objet vers une autre base de données et/ou un autre schéma tout en renommant éventuellement l’objet. 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 forme db_name.schema_name.object_name ou schema_name.object_name, respectivement.

Note

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

  • Le déplacement d’un objet vers un schéma d’accès géré est interdit 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_table_name

Swap renomme deux tables en une seule transaction.

Notez que l’échange d’une table permanente ou transitoire avec une table temporaire, qui ne persiste que pendant la durée de la session utilisateur au cours de laquelle elle a été créée, n’est pas autorisé. Cette restriction empêche un conflit de dénomination qui pourrait se produire lorsqu’une table temporaire est échangée avec une table permanente ou transitoire, et qu’une table permanente ou transitoire existante porte le même nom que la table temporaire. Pour échanger une table permanente ou transitoire avec une table temporaire, utilisez trois instructions ALTER TABLE ... RENAME TO : renommer la table a en c, b en a, puis c en b.

Note

Pour renommer une table ou intervertir deux tables, le rôle utilisé pour effectuer l’opération doit avoir les privilèges OWNERSHIP sur la ou les tables. De plus, renommer une table nécessite le privilège CREATE TABLE sur le schéma de la table.

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) :

STAGE_FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' ) ou . STAGE_FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ] )

Modifie le format de fichier par défaut de la table (pour le chargement et le déchargement des données), qui peut être, au choix :

FORMAT_NAME = file_format_name

Spécifie un objet de format de fichier existant à utiliser pour le chargement/déchargement de données. L’objet de format de fichier spécifié détermine le type de format (CSV, JSON, etc.) et les autres options de format des fichiers de données.

Notez qu’aucune option de format supplémentaire n’est spécifiée dans la chaîne. Au lieu de cela, l’objet de format de fichier nommé définit les autres options de format de fichier utilisées pour charger/décharger les données. Pour plus d’informations, voir CREATE FILE FORMAT.

TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ]

Spécifie le type de fichiers à charger/décharger. D’autres options spécifiques au format peuvent être incluses dans la chaîne. Pour plus d’informations, voir les Options de type de format (dans ce chapitre).

Note

FORMAT_NAME et TYPE s’excluent mutuellement ; vous ne pouvez spécifier que l’un ou l’autre pour une table.

STAGE_COPY_OPTIONS = ( ... )

Modifie les options de copie à utiliser lors du chargement de données à partir de fichiers dans la table. Pour plus de détails, voir Options de copie (dans cette rubrique).

DATA_RETENTION_TIME_IN_DAYS = integer

Paramètre au niveau de l’objet qui modifie la période de conservation de la table pour Time Travel. Pour plus de détails, voir Comprendre et utiliser 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 ou 1

  • Édition Enterprise :

    • 0 à 90 pour les tables permanentes

    • 0 ou 1 pour les tables temporaires et transitoires

Note

Une valeur de 0 désactive effectivement Time Travel pour la table.

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, afin d’éviter que les flux sur la table ne deviennent obsolètes.

Pour une description détaillée de ce paramètre, voir MAX_DATA_EXTENSION_TIME_IN_DAYS.

CHANGE_TRACKING = TRUE | FALSE

Spécifie d’activer ou de désactiver le suivi des modifications sur la table.

  • TRUE active le suivi des modifications sur la table. Cette option ajoute plusieurs colonnes masquées à la table source et commence à stocker les métadonnées de suivi des modifications dans les colonnes. Ces colonnes consomment une petite quantité de stockage.

    Les métadonnées de suivi des modifications peuvent être interrogées à l’aide de la clause CHANGES pour les instructions SELECT, ou en créant et en interrogeant un ou plusieurs flux sur la table.

  • FALSE désactive le suivi des modifications sur la table. Les colonnes cachées associées sont supprimées de la table.

DEFAULT_DDL_COLLATION = 'collation_specification'

Spécifie une spécification de classement par défaut pour toutes les nouvelles colonnes ajoutées à la table.

La définition du paramètre ne modifie pas la spécification de classement des colonnes existantes.

Pour plus de détails sur le paramètre, voir DEFAULT_DDL_COLLATION.

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 de détails sur la spécification des balises dans une instruction, voir Quotas de balises pour les objets et les colonnes.

ENABLE_SCHEMA_EVOLUTION = { TRUE | FALSE }

Active ou désactive les modifications automatiques du schéma de table à partir des données chargées dans la table depuis les fichiers sources, notamment :

  • Colonnes ajoutées.

    Par défaut, l’évolution du schéma est limitée à un maximum de 10 colonnes ajoutées par opération de chargement. Pour demander plus de 10 colonnes ajoutées par opération de chargement, contactez le support Snowflake.

  • La contrainte NOT NULL peut être supprimée pour n’importe quel nombre de colonnes manquantes dans les nouveaux fichiers de données.

La valeur TRUE permet l’évolution automatique du schéma de table. La valeur par défaut FALSE désactive l’évolution automatique du schéma de table.

Note

Le chargement de données à partir de fichiers fait évoluer les colonnes des tables lorsque toutes les conditions suivantes sont réunies :

  • L’instruction COPY INTO <table> inclut l’option MATCH_BY_COLUMN_NAME.

  • Le rôle utilisé pour charger les données dispose du privilège EVOLVE SCHEMA ou OWNERSHIP sur la table.

En outre, pour l’évolution du schéma avec CSV, lorsqu’il est utilisé avec MATCH_BY_COLUMN_NAME et PARSE_HEADER, ERROR_ON_COLUMN_COUNT_MISMATCH doit être défini comme faux.

COMMENT = 'string_literal'

Ajoute un commentaire ou écrase le commentaire existant pour la table.

UNSET ...

Spécifie un(e) ou plusieurs paramètres/propriété(s) à désactiver pour la table, ce qui les réinitialise à leurs valeurs par défaut :

  • DATA_RETENTION_TIME_IN_DAYS

  • MAX_DATA_EXTENSION_TIME_IN_DAYS

  • CHANGE_TRACKING

  • DEFAULT_DDL_COLLATION

  • ENABLE_SCHEMA_EVOLUTION

  • TAG tag_name [ , tag_name ... ]

  • COMMENT

Note

Vous ne pouvez pas utiliser UNSET pour réinitialiser le format de fichier et les options de copie. Pour réinitialiser ces options, vous devez utiliser SET.

policy_name

Identificateur de la politique de masquage ou de la politique d’accès aux lignes ; doit être unique pour votre schéma.

ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])

Ajoute une politique d’accès aux lignes à une table.

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. Utilisez cette expression pour ajouter une politique d’accès aux lignes à la fois à une table et à une table externe.

DROP ROW ACCESS POLICY policy_name

Détruit une politique d’accès aux lignes d’une table.

Utilisez cette expression pour détruire une politique à la fois d’une table et d’une table externe.

DROP ALL ROW ACCESS POLICIES

Détruit toutes associations de politique d’accès aux lignes d’une table.

Cette expression est utile lorsqu’une politique d’accès aux lignes est supprimée d’un schéma avant de supprimer la politique d’une table. Utilisez cette expression pour supprimer des associations de politique d’accès aux lignes d’une table et d’une table externe.

Action de clustering (clusteringAction)

CLUSTER BY ( expr [ , expr , ... ] )

Spécifie (ou modifie) une ou plusieurs colonnes de table ou expressions de colonne en tant que clé de clustering pour la table. Ce sont les colonnes/expressions pour lesquelles le clustering est assuré par le clustering automatique.

Important

Les clés de clustering ne sont pas recommandées ni conçues pour toutes les tables. Elles sont généralement intéressantes pour les tables très importantes (de plusieurs téraoctets).

Avant de spécifier une clé de clustering pour une table, consultez Fonctionnement des structures de table dans Snowflake.

RECLUSTER ...

Obsolète

Effectue un regroupement manuel et incrémentiel d’une table dont la clé de clustering est définie :

MAX_SIZE = budget_in_bytes

Obsolète — utiliser un entrepôt plus grand pour obtenir un reclustering manuel plus efficace

Spécifie la limite supérieure de la quantité de données (en octets) dans la table à regrouper.

WHERE condition

Spécifie une condition ou une plage sur laquelle regrouper les données dans la table.

Note

Seuls les rôles avec le privilège OWNERSHIP ou INSERT sur une table peuvent regrouper la table.

SUSPEND | RESUME RECLUSTER

Active ou désactive Clustering automatique pour la table.

DROP CLUSTERING KEY

Détruit la clé de clustering pour la table.

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 la colonne de table (tableColumnAction)

ADD [ COLUMN ] [ IF NOT EXISTS ] col_name col_data_type . [ DEFAULT default_value | AUTOINCREMENT ... ] . [ inlineConstraint ] [ COLLATE 'collation_specification' ] . [ [ WITH ] MASKING POLICY policy_name ] . [ [ WITH ] TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] ) ] [ , ...]

Ajoute une nouvelle colonne. Vous pouvez spécifier une valeur par défaut, une contrainte en ligne, une spécification de classement, une politique de masquage et/ou une ou plusieurs balises.

La valeur par défaut d’une colonne que vous ajoutez doit être une valeur littérale ; il ne peut pas s’agir d’une expression ni d’une valeur renvoyée par une fonction. Par exemple, la commande suivante renvoie une erreur prévue :

ALTER TABLE t1 ADD COLUMN c5 VARCHAR DEFAULT 12345::VARCHAR;
Copy
002263 (22000): SQL compilation error:
Invalid column default expression [CAST(12345 AS VARCHAR(16777216))]

Lorsque vous commencez par créer une table, vous pouvez utiliser des expressions comme valeurs par défaut, mais pas lorsque vous ajoutez des colonnes.

Pour plus d’informations sur les actions des colonnes de table, voir :

Les opérations ADD COLUMN peuvent être effectuées sur plusieurs colonnes dans la même commande.

Si vous n’êtes pas sûr que la colonne existe déjà, vous pouvez spécifier IF NOT EXISTS lors de l’ajout de la colonne. Si la colonne existe déjà, ADD COLUMN n’a aucun effet sur la colonne existante et n’entraîne pas d’erreur.

Note

Vous ne pouvez pas spécifier IF NOT EXISTS si vous spécifiez également l’un des éléments suivants pour la nouvelle colonne :

  • DEFAULT, AUTOINCREMENT ou IDENTITY

  • UNIQUE, PRIMARY KEY ou FOREIGN KEY

RENAME COLUMN col_name to new_col_name

Renomme la colonne spécifiée en un nouveau nom qui n’est actuellement utilisé pour aucune autre colonne de la table.

Vous ne pouvez pas renommer une colonne qui fait partie d’une clé de clustering.

Lorsqu’un objet (table, colonne, etc.) est renommé, les autres objets qui le référencent doivent être mis à jour avec le nouveau nom.

ALTER | MODIFY [ COLUMN ] ...

Modifie une ou plusieurs propriétés pour une colonne. Cette opération peut être effectuée sur plusieurs colonnes d’une même commande.

Pour une syntaxe détaillée et des exemples pour modifier des colonnes, voir ALTER TABLE … ALTER COLUMN.

USING ( col_name , cond_col_1 ... )

Spécifie les arguments à passer dans l’expression SQL de la politique de masquage conditionnelle.

La première colonne de la liste spécifie la colonne pour les conditions de la politique de masquage ou de tokenisation des données et doit correspondre à la colonne à laquelle la politique de masquage est définie.

Les colonnes supplémentaires spécifient les colonnes à évaluer pour déterminer s’il faut masquer ou tokeniser les données de chaque ligne du résultat de la requête lorsqu’une requête est effectuée sur 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 actuellement définie sur une colonne par une politique de masquage différente dans une seule instruction.

Notez que l’utilisation du mot-clé FORCE exige que le type de données de la politique dans l’instruction ALTER 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.

DROP COLUMN [ IF EXISTS ] col_name [ CASCADE | RESTRICT ]

Supprime la colonne spécifiée de la table.

Si vous n’êtes pas sûr que la colonne existe déjà, vous pouvez spécifier IF EXISTS lors de la suppression de la colonne. Si la colonne n’existe pas, DROP COLUMN n’a aucun effet et n’entraîne pas d’erreur.

La destruction d’une colonne est une opération comportant uniquement des métadonnées. Elle ne réécrit pas immédiatement la ou les micro-partitions et ne libère donc pas immédiatement l’espace utilisé par la colonne. En règle générale, l’espace d’une micro-partition est libéré lors de la réécriture de la micro-partition, généralement lorsqu’une écriture est effectuée en raison d’une opération DML (INSERT, UPDATE, DELETE) ou un re-clustering.

Actions de la colonne de table externe (extTableColumnAction)

Pour toutes les autres modifications de table externes, voir ALTER EXTERNAL TABLE.

ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> AS ( <expr> ) [, ...]

Ajoute une nouvelle colonne à la table externe.

Si vous n’êtes pas sûr que la colonne existe déjà, vous pouvez spécifier IF NOT EXISTS lors de l’ajout de la colonne. Si la colonne existe déjà, ADD COLUMN n’a aucun effet sur la colonne existante et n’entraîne pas d’erreur.

Cette opération peut être effectuée sur plusieurs colonnes d’une même commande.

col_name

Chaîne qui indique l’identificateur de colonne (c’est-à-dire le nom). Toutes les exigences relatives aux identificateurs de table s’appliquent également aux identificateurs de colonne.

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

col_type

Chaîne (constante) qui spécifie le type de données pour la colonne. Le type de données doit correspondre au résultat de expr pour la colonne.

Pour plus de détails sur les types de données qui peuvent être spécifiés pour les colonnes de la table, voir Référence de types de données SQL.

expr

Chaîne qui spécifie l’expression de la colonne. Lorsqu’elle est interrogée, la colonne renvoie les résultats dérivés de cette expression.

Les colonnes de table externes sont des colonnes virtuelles définies à l’aide d’une expression explicite. Ajouter des colonnes virtuelles sous forme d’expressions en utilisant la colonne VALUE et/ou la pseudo-colonne METADATA$FILENAME :

VALUE

Une colonne de type VARIANT qui représente une seule ligne du fichier externe.

CSV

La colonne VALUE structure chaque ligne comme un objet dont les éléments sont identifiés par la position de la colonne (c’est-à-dire {c1: <colonne_1_valeur>, c2: <colonne_2_valeur>, c3: <colonne_1_valeur> ...}).

Par exemple, ajoutez une colonne VARCHAR nommée mycol qui fait référence à la première colonne des fichiers CSV en zone de préparation :

mycol varchar as (value:c1::varchar)
Copy
Données semi-structurées

Mettez les noms et les valeurs des éléments entre guillemets. Parcourez le chemin dans la colonne VALUE en utilisant la notation par points.

Par exemple, supposons que l’exemple suivant représente une seule ligne de données semi-structurées dans un fichier en zone de préparation :

{ "a":"1", "b": { "c":"2", "d":"3" } }
Copy

Ajoutez une colonne VARCHAR nommée mycol qui fait référence à l’élément répétitif imbriqué c dans le fichier en zone de préparation :

mycol varchar as (value:"b"."c"::varchar)
Copy
METADATA$FILENAME

Une pseudo-colonne qui identifie le nom de chaque fichier de données en zone de préparation inclus dans la table externe, y compris son chemin dans la zone de préparation.

RENAME COLUMN col_name to new_col_name

Renomme la colonne spécifiée en un nouveau nom qui n’est actuellement utilisé pour aucune autre colonne de la table externe.

DROP COLUMN [ IF EXISTS ] col_name

Supprime la colonne spécifiée de la table externe.

Si vous n’êtes pas sûr que la colonne existe déjà, vous pouvez spécifier IF EXISTS lors de la suppression de la colonne. Si la colonne n’existe pas, DROP COLUMN n’a aucun effet et n’entraîne pas d’erreur.

Actions de contrainte (constraintAction)

ADD CONSTRAINT

Ajoute une contrainte d’intégrité hors ligne à une ou plusieurs colonnes de la table. Pour ajouter une contrainte en ligne (pour une colonne), voir Actions de la colonne (dans ce chapitre).

RENAME CONSTRAINT constraint_name TO new_constraint_name

Renomme la contrainte spécifiée.

ALTER | MODIFY CONSTRAINT ...

Modifie les propriétés de la contrainte spécifiée.

DROP CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE | FOREIGN KEY ( col_name [ , ... ] ) [ CASCADE | RESTRICT ]

Détruit la contrainte spécifiée pour la colonne ou l’ensemble de colonnes spécifié.

Pour une syntaxe détaillée et des exemples d’ajout ou de modification de contraintes, voir CREATE | ALTER TABLE … CONSTRAINT.

Actions d’optimisation de la recherche (searchOptimizationAction)

ADD SEARCH OPTIMIZATION

Ajoute l’optimisation de recherche pour la table entière ou, si vous spécifiez la clause ON facultative, pour des colonnes spécifiques.

Remarque :

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

  • Si vous essayez d’ajouter une optimisation de recherche sur une vue matérialisée, Snowflake renvoie un message d’erreur.

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 entière).

Pour search_method_with_target, utilisez une expression avec la syntaxe suivante :

<search_method>(<target> [, ...])
Copy

Où :

  • search_method spécifie l’une des méthodes suivantes qui optimisent les requêtes pour un type particulier de prédicat :

    Méthode de recherche

    Description

    EQUALITY

    Prédicats d’égalité et IN

    SUBSTRING

    Prédicats qui correspondent à des sous-chaînes et à des expressions régulières (par exemple, LIKE, ILIKE, RLIKE, REGEXP_LIKE, etc.)

    GEO

    Prédicats qui utilisent des types GEOGRAPHY.

  • 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 :

    Méthode de recherche

    Cibles prises en charge

    EQUALITY

    Colonnes de types numérique, chaîne, binaire et VARIANT, y compris les chemins d’accès aux champs dans des VARIANTs.

    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 ou 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 exemple src:a.b.c, src:a.b.c.d, etc.).

    • Cette configuration n’affecte pas les requêtes qui n’utilisent pas le préfixe src:a.b (par exemple, src:a, src:z, etc.).

    SUBSTRING

    Colonnes de types de données chaîne ou VARIANT, y compris les chemins d’accès aux champs dans VARIANTs. Spécifiez les chemins d’accès aux champs comme décrit ci-dessus sous EQUALITY ; les recherches sur les champs imbriqués sont améliorées de la même manière.

    GEO

    Colonnes du type de données GEOGRAPHY

    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 :

    -- Allowed
    ON SUBSTRING(*)
    ON EQUALITY(*), SUBSTRING(*), GEO(*)
    
    Copy

    Vous ne pouvez pas spécifier les expressions suivantes :

    -- Not allowed
    ON EQUALITY(*, c1)
    ON EQUALITY(c1, *)
    ON EQUALITY(v1:path, *)
    ON EQUALITY(c1), EQUALITY(*)
    
    Copy

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 TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
Copy

Si vous exécutez la commande ALTER 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 ayez exécuté la commande suivante :

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2);
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
Copy

Cela ajoute des prédicats d’égalité pour les colonnes c1, c2, c3 et c4 à la configuration de la table. Ceci est équivalent à l’exécution de la commande :

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
Copy

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 ou, si vous spécifiez la clause ON facultative, pour des colonnes spécifiques.

Remarque :

  • Si une table a la propriété d’optimisation de recherche, alors le fait de supprimer et de rétablir la table préserve la propriété d’optimisation de recherche.

  • La suppression de la propriété d’optimisation de recherche d’une table 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 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.

Pour en spécifier plusieurs, utilisez une virgule entre les éléments.

Vous pouvez spécifier toute combinaison de méthodes de recherche avec des cibles, des noms de colonnes et des IDs d’expressions.

Pour des exemples, voir Suppression de l’optimisation de la recherche pour des colonnes spécifiques.

Options de type de format (formatTypeOptions)

Les options de type de format sont utilisées pour charger des données dans des tables et décharger des données depuis des tables.

En fonction du type de format de fichier spécifié (STAGE_FILE_FORMAT = ( TYPE = ... )), vous pouvez inclure une ou plusieurs des options suivantes, spécifiques au format (séparées par des espaces, des virgules ou de nouvelles lignes) :

TYPE = CSV

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
Utilisation

Chargement de données, déchargement de données et tables externes

Définition
  • Lors du chargement des données, spécifie l’algorithme de compression actuel pour le fichier de données. Snowflake utilise cette option pour détecter comment un fichier de données déjà compressé a été compressé afin que les données compressées dans le fichier puissent être extraites pour le chargement.

  • Lors du déchargement des données, compresse le fichier de données en utilisant l’algorithme de compression spécifié.

Valeurs

Valeurs prises en charge

Remarques

AUTO

Lors du chargement des données, l’algorithme de compression est détecté automatiquement, sauf pour les fichiers compressés par Brotli, qui ne peuvent actuellement pas être détectés automatiquement. Lors du déchargement des données, les fichiers sont automatiquement compressés en utilisant la valeur par défaut, qui est gzip.

GZIP

BZ2

BROTLI

Doit être spécifié lors du chargement/déchargement de fichiers compressés Brotli.

ZSTD

Zstandard v0.8 (et supérieur) est pris en charge.

DEFLATE

Fichiers compressés Deflate (avec en-tête zlib, RFC1950).

RAW_DEFLATE

Fichiers bruts compressés Deflate (sans en-tête, RFC1951).

NONE

Lors du chargement des données, indique que les fichiers n’ont pas été compressés. Lors du déchargement des données, spécifie que les fichiers déchargés ne sont pas compressés.

Par défaut

AUTO

RECORD_DELIMITER = 'character' | NONE
Utilisation

Chargement de données, déchargement de données et tables externes

Définition

Un ou plusieurs caractères à un octet ou à plusieurs octets qui séparent les enregistrements dans un fichier d’entrée (chargement de données) ou un fichier déchargé (déchargement de données). Accepte les séquences d’échappement courantes ou les caractères à un octet ou à plusieurs octets suivants :

Caractères à un octet

Valeurs octales (préfixées par \\) ou les valeurs hexadécimales (préfixées par \x ou 0x). Par exemple, pour les enregistrements délimités par le caractère accent circonflexe (^), spécifiez la valeur octale (\\136) ou hexadécimale (0x5e).

Caractères multi-octets

Valeurs hexagonales (préfixées par \x). Par exemple, pour les enregistrements délimités par le caractère cent (¢), spécifiez la valeur hexadécimale (\xC2\xA2).

Le délimiteur pour RECORD_DELIMITER ou FIELD_DELIMITER ne peut pas être une sous-chaîne du délimiteur pour l’autre option de format de fichier (par exemple FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb').

Le délimiteur spécifié doit être un caractère UTF-8 valide et non une séquence aléatoire d’octets. Notez également que le délimiteur est limité à un maximum de 20 caractères.

Accepte également une valeur de NONE.

Par défaut
Chargement des données

Caractère de nouvelle ligne. Notez que « nouvelle ligne » fait sens, de sorte que \r\n sera compris comme une nouvelle ligne pour les fichiers sur une plate-forme Windows.

Déchargement des données

Caractère de nouvelle ligne (\n).

FIELD_DELIMITER = 'character' | NONE
Utilisation

Chargement de données, déchargement de données et tables externes

Définition

Un ou plusieurs caractères à un octet ou à plusieurs octets qui séparent les champs d’un fichier d’entrée (chargement de données) ou d’un fichier déchargé (déchargement de données). Accepte les séquences d’échappement courantes ou les caractères à un octet ou à plusieurs octets suivants :

Caractères à un octet

Valeurs octales (préfixées par \\) ou les valeurs hexadécimales (préfixées par \x ou 0x). Par exemple, pour les enregistrements délimités par le caractère accent circonflexe (^), spécifiez la valeur octale (\\136) ou hexadécimale (0x5e).

Caractères multi-octets

Valeurs hexagonales (préfixées par \x). Par exemple, pour les enregistrements délimités par le caractère cent (¢), spécifiez la valeur hexadécimale (\xC2\xA2).

Le délimiteur pour RECORD_DELIMITER ou FIELD_DELIMITER ne peut pas être une sous-chaîne du délimiteur pour l’autre option de format de fichier (par exemple FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb').

Note

Pour les caractères autres que ASCII, vous devez utiliser la valeur de la séquence d’octets hexagonale pour obtenir un comportement déterministe.

Le délimiteur spécifié doit être un caractère UTF-8 valide et non une séquence aléatoire d’octets. Notez également que le délimiteur est limité à un maximum de 20 caractères.

Accepte également une valeur de NONE.

Par défaut

virgule (,)

FILE_EXTENSION = 'string' | NONE
Utilisation

Déchargement des données uniquement

Définition

Spécifie l’extension des fichiers déchargés dans une zone de préparation. Accepte toute extension. L’utilisateur est chargé de spécifier une extension de fichier qui peut être lue par tout logiciel ou service désiré.

Par défaut

null, ce qui signifie que l’extension du fichier est déterminée par le type de format : .csv[compression], où compression est l’extension ajoutée par la méthode de compression, si COMPRESSION est défini.

Note

Si l’option de copie SINGLE est TRUE, alors la commande COPY décharge un fichier sans extension par défaut. Pour spécifier une extension de fichier, fournissez un nom et une extension de fichier dans le chemin internal_location ou external_location (par ex. copy into @stage/data.csv).

PARSE_HEADER = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut utiliser les en-têtes de la première ligne des fichiers de données pour déterminer les noms des colonnes.

Cette option de format de fichier s’applique uniquement aux actions suivantes :

  • Détection automatique des définitions de colonnes à l’aide de la fonction INFER_SCHEMA.

  • Chargement de données CSV dans des colonnes séparées en utilisant la fonction INFER_SCHEMA et l’option de copie MATCH_BY_COLUMN_NAME.

Si l’option est définie sur TRUE, les en-têtes de la première ligne seront utilisés pour déterminer les noms des colonnes. La valeur par défaut FALSE renvoie les noms de colonnes sous la forme c , où est la position de la colonne.

Notez que l’option SKIP_HEADER n’est pas prise en charge avec PARSE_HEADER = TRUE.

Par défaut : FALSE

SKIP_HEADER = integer
Utilisation

Chargement de données et tables externes

Définition

Nombre de lignes au début du fichier à ignorer.

Notez que SKIP_HEADER n’utilise pas les valeurs RECORD_DELIMITER ou FIELD_DELIMITER pour déterminer la nature d’une ligne d’en-tête. Au lieu de cela, il ignore simplement le nombre spécifié de lignes délimitées par CRLF (retour chariot, saut de ligne) dans le fichier. RECORD_DELIMITER et FIELD_DELIMITER sont ensuite utilisés pour déterminer les lignes de données à charger.

Par défaut

0

SKIP_BLANK_LINES = TRUE | FALSE
Utilisation

Chargement de données et tables externes

Définition

Booléen qui indique d’ignorer toutes les lignes vides rencontrées dans les fichiers de données ; sinon, les lignes vides produisent une erreur de fin d’enregistrement (comportement par défaut).

Par défaut : FALSE

DATE_FORMAT = 'string' | AUTO
Utilisation

Chargement et déchargement des données

Définition

Définit le format des valeurs de date dans les fichiers de données (chargement des données) ou la table (déchargement des données). Si une valeur n’est pas spécifiée ou est AUTO, la valeur du paramètre DATE_INPUT_FORMAT (chargement de données) ou DATE_OUTPUT_FORMAT (déchargement de données) est utilisée.

Par défaut

AUTO

TIME_FORMAT = 'string' | AUTO
Utilisation

Chargement et déchargement des données

Définition

Définit le format des valeurs temporelles dans les fichiers de données (chargement des données) ou la table (déchargement des données). Si une valeur n’est pas spécifiée ou est AUTO, la valeur du paramètre TIME_INPUT_FORMAT (chargement de données) ou TIME_OUTPUT_FORMAT (déchargement de données) est utilisée.

Par défaut

AUTO

TIMESTAMP_FORMAT = string' | AUTO
Utilisation

Chargement et déchargement des données

Définition

Définit le format des valeurs d’horodatage dans les fichiers de données (chargement des données) ou la table (déchargement des données). Si une valeur n’est pas spécifiée ou est AUTO, la valeur du paramètre TIMESTAMP_INPUT_FORMAT (chargement de données) ou TIMESTAMP_OUTPUT_FORMAT (déchargement de données) est utilisée.

Par défaut

AUTO

BINARY_FORMAT = HEX | BASE64 | UTF8
Utilisation

Chargement et déchargement des données

Définition

Définit le format d’encodage pour l’entrée ou la sortie binaire. L’option peut être utilisée pour charger ou décharger des données à partir de colonnes binaires dans une table.

Par défaut

HEX

ESCAPE = 'character' | NONE
Utilisation

Chargement et déchargement des données

Définition

Chaîne de caractères à un octet utilisée comme caractère d’échappement pour les valeurs de champs délimitées ou non délimitées. Un caractère d’échappement appelle une autre interprétation sur les caractères suivants dans une séquence de caractères. Vous pouvez utiliser le caractère ESCAPE pour interpréter les instances du caractère FIELD_OPTIONALLY_ENCLOSED_BY ou dans les données comme des littéraux.

Accepte les séquences d’échappement, les valeurs octales ou les valeurs hexadécimales courantes.

Chargement des données

Spécifie le caractère d’échappement pour les champs délimités uniquement. Spécifiez le caractère utilisé pour délimiter les champs en définissant FIELD_OPTIONALLY_ENCLOSED_BY.

Note

Cette option de format de fichier ne prend en charge que les caractères à un seul octet. Notez que le codage des caractères UTF-8 représente les caractères ASCII d’ordre supérieur comme des caractères à plusieurs octets. Si votre fichier de données est codé avec le jeu de caractères UTF-8, vous ne pouvez pas spécifier un caractère ASCII d’ordre supérieur comme valeur d’option.

En outre, si vous spécifiez un caractère ASCII d’ordre élevé, nous vous recommandons de définir l’option de format de fichier ENCODING = 'string' comme codage de caractères pour vos fichiers de données afin de garantir la bonne interprétation du caractère.

Déchargement des données

Si cette option est activée, elle remplace le jeu de caractères d’échappement pour ESCAPE_UNENCLOSED_FIELD.

Par défaut

NONE

ESCAPE_UNENCLOSED_FIELD = 'character' | NONE
Utilisation

Chargement de données, déchargement de données et tables externes

Définition

Chaîne de caractères à un octet utilisée comme caractère d’échappement pour les valeurs de champs non délimitées uniquement. Un caractère d’échappement appelle une autre interprétation sur les caractères suivants dans une séquence de caractères. Vous pouvez utiliser le caractère ESCAPE pour interpréter les instances des caractères FIELD_DELIMITER ou RECORD_DELIMITER dans les données comme des littéraux. Le caractère d’échappement peut également être utilisé pour échapper les instances de lui-même dans les données.

Accepte les séquences d’échappement, les valeurs octales ou les valeurs hexadécimales courantes.

Chargement des données

Spécifie le caractère d’échappement pour les champs non délimités uniquement.

Note

  • La valeur par défaut est \\. Si une ligne d’un fichier de données se termine par une barre oblique inverse (\), ce caractère échappe le caractère de nouvelle ligne ou de retour chariot spécifié pour l’option de format de fichier RECORD_DELIMITER. Par conséquent, l’opération de chargement considère cette ligne et la suivante comme une seule ligne de données. Pour éviter ce problème, définissez la valeur sur NONE.

  • Cette option de format de fichier ne prend en charge que les caractères à un seul octet. Notez que le codage des caractères UTF-8 représente les caractères ASCII d’ordre supérieur comme des caractères à plusieurs octets. Si votre fichier de données est codé avec le jeu de caractères UTF-8, vous ne pouvez pas spécifier un caractère ASCII d’ordre supérieur comme valeur d’option.

    En outre, si vous spécifiez un caractère ASCII d’ordre élevé, nous vous recommandons de définir l’option de format de fichier ENCODING = 'string' comme codage de caractères pour vos fichiers de données afin de garantir la bonne interprétation du caractère.

Déchargement des données

Si ESCAPE est défini, le jeu de caractères d’échappement pour cette option de format de fichier l’emporte sur cette option.

Par défaut

barre oblique inverse (\\)

TRIM_SPACE = TRUE | FALSE
Utilisation

Chargement de données et tables externes

Définition

Booléen qui spécifie s’il faut supprimer les espaces blancs des champs.

Par exemple, si votre logiciel de base de données externe contient des champs entre guillemets, mais insère un espace d’en-tête, Snowflake lit l’espace d’en-tête plutôt que le caractère guillemet comme début du champ (c’est-à-dire que les guillemets sont interprétés comme faisant partie de la chaîne des données du champ). Définissez cette option sur TRUE pour supprimer les espaces indésirables pendant le chargement des données.

Comme autre exemple, si les espaces d’en-tête ou de fin entourent des guillemets qui délimitent les chaînes de caractères, vous pouvez supprimer les espaces environnants en utilisant cette option et le caractère guillemet en utilisant l’option FIELD_OPTIONALLY_ENCLOSED_BY. Notez que tous les espaces entre les guillemets sont préservés. Par exemple, en supposant que FIELD_DELIMITER = '|' et FIELD_OPTIONALLY_ENCLOSED_BY = '"' :

|"Hello world"|    /* loads as */  >Hello world<
|" Hello world "|  /* loads as */  > Hello world <
| "Hello world" |  /* loads as */  >Hello world<
Copy

(les parenthèses dans cet exemple ne sont pas chargées ; elles sont utilisées pour délimiter le début et la fin des chaînes chargées)

Par défaut

FALSE

FIELD_OPTIONALLY_ENCLOSED_BY = 'character' | NONE
Utilisation

Chargement de données, déchargement de données et tables externes

Définition

Caractère utilisé pour délimiter des chaînes. La valeur peut être NONE, un caractère guillemet simple (') ou un caractère guillemet double ("). Pour utiliser le caractère guillemet simple, utilisez la représentation octale ou hexadécimale (0x27) ou le double échappement en guillemet simple ('').

Lorsqu’un champ contient ce caractère, effectuez un échappement en utilisant le même caractère. Par exemple, si la valeur est le caractère de guillemet double et qu’un champ contient la chaîne A "B" C, effectuez un échappement des guillemets doubles comme suit :

A ""B"" C

Par défaut

NONE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
Utilisation

Chargement de données, déchargement de données et tables externes

Définition

Chaîne utilisée pour les conversions entrante et sortante de SQL NULL :

  • Lors du chargement des données, Snowflake remplace ces valeurs de la source de chargement des données par SQL NULL. Pour spécifier plus d’une chaîne, mettez la liste des chaînes entre parenthèses et utilisez des virgules pour séparer chaque valeur.

    Notez que Snowflake convertit toutes les instances de la valeur en NULL, quel que soit le type de données. Par exemple, si 2 est spécifié comme valeur, toutes les instances de 2 sous forme de chaîne ou de nombre sont converties.

    Par exemple :

    NULL_IF = ('\\N', 'NULL', 'NUL', '')

    Notez que cette option peut inclure des chaînes vides.

  • Lors du déchargement des données, Snowflake convertit les valeurs NULL SQL vers la première valeur de la liste.

Par défaut

\\N (c.-à-d. NULL, qui suppose que la valeur ESCAPE_UNENCLOSED_FIELD est \\)

ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut générer une erreur d’analyse si le nombre de colonnes délimitées (c’est-à-dire de champs) dans un fichier d’entrée ne correspond pas au nombre de colonnes de la table correspondante.

Si ce paramètre est réglé sur FALSE, aucune erreur n’est générée et le chargement continue. Si le fichier est chargé correctement :

  • Si le fichier d’entrée contient des enregistrements contenant plus de champs que de colonnes dans la table, les champs correspondants sont chargés par ordre d’occurrence dans le fichier et les autres champs ne sont pas chargés.

  • Si le fichier d’entrée contient des enregistrements avec moins de champs que de colonnes dans la table, les colonnes qui ne correspondent pas dans la table sont chargées avec des valeurs NULL.

Cette option suppose que tous les enregistrements du fichier d’entrée ont la même longueur (c’est-à-dire qu’un fichier contenant des enregistrements de longueur variable renvoie une erreur quelle que soit la valeur spécifiée pour ce paramètre).

Par défaut

TRUE

Note

Lors de la transformation des données pendant le chargement (c’est-à-dire, en utilisant une requête comme source pour la commande COPY), cette option est ignorée. Il n’est pas nécessaire que vos fichiers de données aient le même nombre et le même ordre de colonnes que votre table cible.

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut remplacer les caractères UTF-8 non valides par le caractère de remplacement Unicode ().

S’il est défini sur TRUE, Snowflake remplace les caractères UTF-8 non valides par le caractère de remplacement Unicode.

Si FALSE est défini, l’opération de chargement génère une erreur lorsqu’un codage de caractères UTF-8 non valide est détecté.

Par défaut

FALSE

EMPTY_FIELD_AS_NULL = TRUE | FALSE
Utilisation

Chargement de données, déchargement de données et tables externes

Définition
  • Lors du chargement de données, spécifie s’il faut insérer SQL NULL pour les champs vides dans un fichier d’entrée, qui sont représentés par deux délimiteurs successifs (par ex., ,,).

    Si l’option est définie sur FALSE, Snowflake essaie de placer un champ vide dans le type de colonne correspondant. Une chaîne vide est insérée dans les colonnes de type STRING. Pour les autres types de colonne, la commande COPY produit une erreur.

  • Lors du déchargement des données, cette option est utilisée en combinaison avec FIELD_OPTIONALLY_ENCLOSED_BY. Lorsque FIELD_OPTIONALLY_ENCLOSED_BY = NONE, le paramètre EMPTY_FIELD_AS_NULL = FALSE spécifie de décharger les chaînes vides dans les tables pour vider les valeurs de chaîne sans guillemets entourant les valeurs de champ.

    S’il est défini sur TRUE, FIELD_OPTIONALLY_ENCLOSED_BY doit spécifier un caractère pour entourer les chaînes.

Par défaut

TRUE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut ignorer le BOM (marque d’ordre d’octet), s’il est présent dans un fichier de données. Une marque BOM est un code de caractère placé au début d’un fichier de données qui définit l’ordre des octets et la forme de l’encodage.

S’il est réglé sur FALSE, Snowflake reconnaît n’importe quel BOM dans les fichiers de données, ce qui pourrait entraîner une erreur BOM ou une fusion dans la première colonne du tableau.

Par défaut

TRUE

ENCODING = 'string'
Utilisation

Chargement de données et tables externes

Définition

Chaîne (constante) qui spécifie le jeu de caractères des données sources lors du chargement des données dans une table.

Jeu de caractères

Valeur ENCODING 

Langues acceptées

Remarques

Big5

BIG5

Chinois traditionnel

EUC-JP

EUCJP

Japonais

EUC-KR

EUCKR

Coréen

GB18030

GB18030

Chinois

IBM420

IBM420

Arabe

IBM424

IBM424

Hébreu

IBM949

IBM949

Coréen

ISO-2022-CN

ISO2022CN

Chinois simplifié

ISO-2022-JP

ISO2022JP

Japonais

ISO-2022-KR

ISO2022KR

Coréen

ISO-8859-1

ISO88591

Allemand, anglais, danois, français, italien, norvégien, néerlandais, portugais, suédois

ISO-8859-2

ISO88592

Tchèque, hongrois, polonais, roumain

ISO-8859-5

ISO88595

Russe

ISO-8859-6

ISO88596

Arabe

ISO-8859-7

ISO88597

Grec

ISO-8859-8

ISO88598

Hébreu

ISO-8859-9

ISO88599

Turc

ISO-8859-15

ISO885915

Allemand, anglais, danois, français, italien, norvégien, néerlandais, portugais, suédois

Identique à ISO-8859-1 à l’exception des 8 caractères, y compris le symbole monétaire Euro.

KOI8-R

KOI8R

Russe

Shift_JIS

SHIFTJIS

Japonais

UTF-8

UTF8

Toutes les langues

Pour charger des données à partir de fichiers délimités (CSV, TSV, etc.), UTF-8 est la valeur par défaut. . . Pour charger des données à partir de tous les autres formats de fichier pris en charge (JSON, Avro, etc.), ainsi que pour décharger des données, UTF-8 est le seul jeu de caractères pris en charge.

UTF-16

UTF16

Toutes les langues

UTF-16BE

UTF16BE

Toutes les langues

UTF-16LE

UTF16LE

Toutes les langues

UTF-32

UTF32

Toutes les langues

UTF-32BE

UTF32BE

Toutes les langues

UTF-32LE

UTF32LE

Toutes les langues

windows-949

WINDOWS949

Coréen

windows-1250

WINDOWS1250

Tchèque, hongrois, polonais, roumain

windows-1251

WINDOWS1251

Russe

windows-1252

WINDOWS1252

Allemand, anglais, danois, français, italien, norvégien, néerlandais, portugais, suédois

windows-1253

WINDOWS1253

Grec

windows-1254

WINDOWS1254

Turc

windows-1255

WINDOWS1255

Hébreu

windows-1256

WINDOWS1256

Arabe

Par défaut

UTF8

Note

Snowflake stocke toutes les données en interne dans le jeu de caractères UTF-8. Les données sont converties en UTF-8 avant d’être chargées dans Snowflake.

TYPE = JSON

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
Utilisation

Chargement de données et tables externes

Définition
  • Lors du chargement des données, spécifie l’algorithme de compression actuel pour le fichier de données. Snowflake utilise cette option pour détecter comment un fichier de données déjà compressé a été compressé afin que les données compressées dans le fichier puissent être extraites pour le chargement.

  • Lors du déchargement des données, compresse le fichier de données en utilisant l’algorithme de compression spécifié.

Valeurs

Valeurs prises en charge

Remarques

AUTO

Lors du chargement des données, l’algorithme de compression est détecté automatiquement, sauf pour les fichiers compressés par Brotli, qui ne peuvent actuellement pas être détectés automatiquement. Lors du déchargement des données, les fichiers sont automatiquement compressés en utilisant la valeur par défaut, qui est gzip.

GZIP

BZ2

BROTLI

Doit être spécifié lors du chargement/déchargement de fichiers compressés Brotli.

ZSTD

Zstandard v0.8 (et supérieur) est pris en charge.

DEFLATE

Fichiers compressés Deflate (avec en-tête zlib, RFC1950).

RAW_DEFLATE

Fichiers bruts compressés Deflate (sans en-tête, RFC1951).

NONE

Lors du chargement des données, indique que les fichiers n’ont pas été compressés. Lors du déchargement des données, spécifie que les fichiers déchargés ne sont pas compressés.

Par défaut

AUTO

DATE_FORMAT = 'string' | AUTO
Utilisation

Chargement des données uniquement

Définition

Définit le format des valeurs de chaîne de date dans les fichiers de données. Si une valeur n’est pas spécifiée ou est AUTO, la valeur du paramètre DATE_INPUT_FORMAT est utilisée.

Cette option de format de fichier s’applique uniquement aux actions suivantes :

  • Chargement des données JSON dans des colonnes séparées en utilisant l’option de copie MATCH_BY_COLUMN_NAME.

  • Chargement des données JSON dans des colonnes distinctes en spécifiant une requête dans l’instruction COPY (c’est-à-dire une transformation COPY).

Par défaut

AUTO

TIME_FORMAT = 'string' | AUTO
Utilisation

Chargement des données uniquement

Définition

Définit le format des valeurs de la chaîne de temps dans les fichiers de données. Si une valeur n’est pas spécifiée ou est AUTO, la valeur du paramètre TIME_INPUT_FORMAT est utilisée.

Cette option de format de fichier s’applique uniquement aux actions suivantes :

  • Chargement des données JSON dans des colonnes séparées en utilisant l’option de copie MATCH_BY_COLUMN_NAME.

  • Chargement des données JSON dans des colonnes distinctes en spécifiant une requête dans l’instruction COPY (c’est-à-dire une transformation COPY).

Par défaut

AUTO

TIMESTAMP_FORMAT = string' | AUTO
Utilisation

Chargement des données uniquement

Définition

Définit le format des valeurs de chaîne d’horodatage dans les fichiers de données. Si une valeur n’est pas spécifiée ou est AUTO, la valeur du paramètre TIMESTAMP_INPUT_FORMAT est utilisée.

Cette option de format de fichier s’applique uniquement aux actions suivantes :

  • Chargement des données JSON dans des colonnes séparées en utilisant l’option de copie MATCH_BY_COLUMN_NAME.

  • Chargement des données JSON dans des colonnes distinctes en spécifiant une requête dans l’instruction COPY (c’est-à-dire une transformation COPY).

Par défaut

AUTO

BINARY_FORMAT = HEX | BASE64 | UTF8
Utilisation

Chargement des données uniquement

Définition

Définit le format d’encodage des valeurs de chaînes binaires dans les fichiers de données. L’option peut être utilisée pour charger des données à partir de colonnes binaires dans une table.

Cette option de format de fichier s’applique uniquement aux actions suivantes :

  • Chargement des données JSON dans des colonnes séparées en utilisant l’option de copie MATCH_BY_COLUMN_NAME.

  • Chargement des données JSON dans des colonnes distinctes en spécifiant une requête dans l’instruction COPY (c’est-à-dire une transformation COPY).

Par défaut

HEX

TRIM_SPACE = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut supprimer les espaces blancs de début et de fin des chaînes.

Par exemple, si votre logiciel de base de données externe contient des champs entre guillemets, mais insère un espace d’en-tête, Snowflake lit l’espace d’en-tête plutôt que le caractère guillemet comme début du champ (c’est-à-dire que les guillemets sont interprétés comme faisant partie de la chaîne des données du champ). Définissez cette option sur TRUE pour supprimer les espaces indésirables pendant le chargement des données.

Cette option de format de fichier est appliquée aux actions suivantes uniquement lors du chargement de données JSON dans des colonnes séparées à l’aide de l’option de copie MATCH_BY_COLUMN_NAME.

Par défaut

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
Utilisation

Chargement des données uniquement

Définition

Chaîne utilisée pour les conversions entrante et sortante de SQL NULL. Snowflake remplace ces chaînes de la source de chargement des données par SQL NULL. Pour spécifier plus d’une chaîne, mettez la liste des chaînes entre parenthèses et utilisez des virgules pour séparer chaque valeur.

Cette option de format de fichier est appliquée aux actions suivantes uniquement lors du chargement de données JSON dans des colonnes séparées à l’aide de l’option de copie MATCH_BY_COLUMN_NAME.

Notez que Snowflake convertit toutes les instances de la valeur en NULL, quel que soit le type de données. Par exemple, si 2 est spécifié comme valeur, toutes les instances de 2 sous forme de chaîne ou de nombre sont converties.

Par exemple :

NULL_IF = ('\\N', 'NULL', 'NUL', '')

Notez que cette option peut inclure des chaînes vides.

Par défaut

\\N (c.-à-d. NULL, qui suppose que la valeur ESCAPE_UNENCLOSED_FIELD est \\)

FILE_EXTENSION = 'string' | NONE
Utilisation

Déchargement des données uniquement

Définition

Spécifie l’extension des fichiers déchargés dans une zone de préparation. Accepte toute extension. L’utilisateur est chargé de spécifier une extension de fichier qui peut être lue par tout logiciel ou service désiré.

Par défaut

null, ce qui signifie que l’extension du fichier est déterminée par le type de format : .json[compression], où compression est l’extension ajoutée par la méthode de compression, si COMPRESSION est défini.

ENABLE_OCTAL = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui permet d’analyser les nombres octaux.

Par défaut

FALSE

ALLOW_DUPLICATE = TRUE | FALSE
Utilisation

Chargement de données et tables externes

Définition

Booléen qui indique d’autoriser les noms de champs d’objets dupliqués (seul le dernier sera conservé).

Par défaut

FALSE

STRIP_OUTER_ARRAY = TRUE | FALSE
Utilisation

Chargement de données et tables externes

Définition

Booléen qui demande à l’analyseur JSON de supprimer les crochets extérieurs (comme [ ]).

Par défaut

FALSE

STRIP_NULL_VALUES = TRUE | FALSE
Utilisation

Chargement de données et tables externes

Définition

Booléen qui demande à l’analyseur JSON de supprimer les champs d’objets ou les éléments de tableau contenant des valeurs null. Par exemple, lorsque défini sur TRUE :

Avant

Après

[null]

[]

[null,null,3]

[,,3]

{"a":null,"b":null,"c":123}

{"c":123}

{"a":[1,null,2],"b":{"x":null,"y":88}}

{"a":[1,,2],"b":{"y":88}}

Par défaut

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
Utilisation

Chargement de données et table externe

Définition

Booléen qui spécifie s’il faut remplacer les caractères UTF-8 non valides par le caractère de remplacement Unicode (). Cette option permet de remplacer un caractère par un autre.

Valeurs

S’il est défini sur TRUE, Snowflake remplace les caractères UTF-8 non valides par le caractère de remplacement Unicode.

Si FALSE est défini, l’opération de chargement génère une erreur lorsqu’un codage de caractères UTF-8 non valide est détecté.

Par défaut

FALSE

IGNORE_UTF8_ERRORS = TRUE | FALSE
Utilisation

Chargement de données et table externe

Définition

Booléen qui spécifie si les erreurs d’encodage UTF-8 produisent des conditions d’erreur. Il s’agit d’une syntaxe alternative pour REPLACE_INVALID_CHARACTERS.

Valeurs

Si ce paramètre est réglé sur TRUE, toute séquence UTF-8 non valide est remplacée discrètement par le caractère Unicode U+FFFD (c.-à-d. un « caractère de remplacement »).

Si FALSE est défini, l’opération de chargement génère une erreur lorsqu’un codage de caractères UTF-8 non valide est détecté.

Par défaut

FALSE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut ignorer le BOM (marque d’ordre d’octet), s’il est présent dans un fichier de données. Une marque BOM est un code de caractère placé au début d’un fichier de données qui définit l’ordre des octets et la forme de l’encodage.

S’il est réglé sur FALSE, Snowflake reconnaît n’importe quel BOM dans les fichiers de données, ce qui pourrait entraîner une erreur BOM ou une fusion dans la première colonne du tableau.

Par défaut

TRUE

TYPE = AVRO

COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
Utilisation

Chargement des données uniquement

Définition
  • Lors du chargement des données, spécifie l’algorithme de compression actuel pour le fichier de données. Snowflake utilise cette option pour détecter comment un fichier de données déjà compressé a été compressé afin que les données compressées dans le fichier puissent être extraites pour le chargement.

  • Lors du déchargement des données, compresse le fichier de données en utilisant l’algorithme de compression spécifié.

Valeurs

Valeurs prises en charge

Remarques

AUTO

Lors du chargement des données, l’algorithme de compression est détecté automatiquement, sauf pour les fichiers compressés par Brotli, qui ne peuvent actuellement pas être détectés automatiquement. Lors du déchargement des données, les fichiers sont automatiquement compressés en utilisant la valeur par défaut, qui est gzip.

GZIP

BROTLI

Doit être spécifié lors du chargement/déchargement de fichiers compressés Brotli.

ZSTD

Zstandard v0.8 (et supérieur) est pris en charge.

DEFLATE

Fichiers compressés Deflate (avec en-tête zlib, RFC1950).

RAW_DEFLATE

Fichiers bruts compressés Deflate (sans en-tête, RFC1951).

NONE

Lors du chargement des données, indique que les fichiers n’ont pas été compressés. Lors du déchargement des données, spécifie que les fichiers déchargés ne sont pas compressés.

Par défaut

AUTO.

Note

Nous vous recommandons d’utiliser l’option par défaut AUTO car elle déterminera à la fois la compression du fichier et celle du codec. La spécification d’une option de compression fait référence à la compression de fichiers, et non à la compression de blocs (codecs).

TRIM_SPACE = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut supprimer les espaces blancs de début et de fin des chaînes.

Par exemple, si votre logiciel de base de données externe contient des champs entre guillemets, mais insère un espace d’en-tête, Snowflake lit l’espace d’en-tête plutôt que le caractère guillemet comme début du champ (c’est-à-dire que les guillemets sont interprétés comme faisant partie de la chaîne des données du champ). Définissez cette option sur TRUE pour supprimer les espaces indésirables pendant le chargement des données.

Cette option de format de fichier est appliquée aux actions suivantes uniquement lors du chargement de données Avro dans des colonnes séparées à l’aide de l’option de copie MATCH_BY_COLUMN_NAME.

Par défaut

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
Utilisation

Chargement de données et table externe

Définition

Booléen qui spécifie s’il faut remplacer les caractères UTF-8 non valides par le caractère de remplacement Unicode (). Cette option permet de remplacer un caractère par un autre.

Valeurs

S’il est défini sur TRUE, Snowflake remplace les caractères UTF-8 non valides par le caractère de remplacement Unicode.

Si FALSE est défini, l’opération de chargement génère une erreur lorsqu’un codage de caractères UTF-8 non valide est détecté.

Par défaut

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
Utilisation

Chargement des données uniquement

Définition

Chaîne utilisée pour les conversions entrante et sortante de SQL NULL. Snowflake remplace ces chaînes de la source de chargement des données par SQL NULL. Pour spécifier plus d’une chaîne, mettez la liste des chaînes entre parenthèses et utilisez des virgules pour séparer chaque valeur.

Cette option de format de fichier est appliquée aux actions suivantes uniquement lors du chargement de données Avro dans des colonnes séparées à l’aide de l’option de copie MATCH_BY_COLUMN_NAME.

Notez que Snowflake convertit toutes les instances de la valeur en NULL, quel que soit le type de données. Par exemple, si 2 est spécifié comme valeur, toutes les instances de 2 sous forme de chaîne ou de nombre sont converties.

Par exemple :

NULL_IF = ('\\N', 'NULL', 'NUL', '')

Notez que cette option peut inclure des chaînes vides.

Par défaut

\\N (c.-à-d. NULL, qui suppose que la valeur ESCAPE_UNENCLOSED_FIELD est \\)

TYPE = ORC

TRIM_SPACE = TRUE | FALSE
Utilisation

Chargement de données et tables externes

Définition

Booléen qui spécifie s’il faut supprimer les espaces blancs de début et de fin des chaînes.

Par exemple, si votre logiciel de base de données externe contient des champs entre guillemets, mais insère un espace d’en-tête, Snowflake lit l’espace d’en-tête plutôt que le caractère guillemet comme début du champ (c’est-à-dire que les guillemets sont interprétés comme faisant partie de la chaîne des données du champ). Définissez cette option sur TRUE pour supprimer les espaces indésirables pendant le chargement des données.

Cette option de format de fichier est appliquée aux actions suivantes uniquement lors du chargement des données Orc dans des colonnes séparées à l’aide de l’option de copie MATCH_BY_COLUMN_NAME.

Par défaut

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
Utilisation

Chargement de données et table externe

Définition

Booléen qui spécifie s’il faut remplacer les caractères UTF-8 non valides par le caractère de remplacement Unicode (). Cette option permet de remplacer un caractère par un autre.

Valeurs

S’il est défini sur TRUE, Snowflake remplace les caractères UTF-8 non valides par le caractère de remplacement Unicode.

Si FALSE est défini, l’opération de chargement génère une erreur lorsqu’un codage de caractères UTF-8 non valide est détecté.

Par défaut

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
Utilisation

Chargement de données et tables externes

Définition

Chaîne utilisée pour les conversions entrante et sortante de SQL NULL. Snowflake remplace ces chaînes de la source de chargement des données par SQL NULL. Pour spécifier plus d’une chaîne, mettez la liste des chaînes entre parenthèses et utilisez des virgules pour séparer chaque valeur.

Cette option de format de fichier est appliquée aux actions suivantes uniquement lors du chargement des données Orc dans des colonnes séparées à l’aide de l’option de copie MATCH_BY_COLUMN_NAME.

Notez que Snowflake convertit toutes les instances de la valeur en NULL, quel que soit le type de données. Par exemple, si 2 est spécifié comme valeur, toutes les instances de 2 sous forme de chaîne ou de nombre sont converties.

Par exemple :

NULL_IF = ('\\N', 'NULL', 'NUL', '')

Notez que cette option peut inclure des chaînes vides.

Par défaut

\\N (c.-à-d. NULL, qui suppose que la valeur ESCAPE_UNENCLOSED_FIELD est \\)

TYPE = PARQUET

COMPRESSION = AUTO | LZO | SNAPPY | NONE
Utilisation

Chargement de données, déchargement de données et tables externes

Définition

  • Lors du chargement des données, spécifie l’algorithme de compression actuel pour les colonnes des fichiers Parquet.

  • Lors du déchargement des données, compresse le fichier de données en utilisant l’algorithme de compression spécifié.

Valeurs

Valeurs prises en charge

Remarques

AUTO

Lors du chargement des données, l’algorithme de compression est détecté automatiquement. Prend en charge les algorithmes de compression suivants : Brotli, gzip, Lempel–Ziv–Oberhumer (LZO), LZ4, Snappy ou Zstandard v0.8 (et versions ultérieures). . Lors du déchargement des données, les fichiers déchargés sont compressés en utilisant l’algorithme de compression Snappy par défaut.

LZO

Lors du déchargement des données, les fichiers sont compressés à l’aide de l’algorithme Snappy par défaut. Si vous déchargez des données dans des fichiers LZO compressés, spécifiez cette valeur.

SNAPPY

Lors du déchargement des données, les fichiers sont compressés à l’aide de l’algorithme Snappy par défaut. Vous pouvez spécifier cette valeur en option.

NONE

Lors du chargement des données, indique que les fichiers n’ont pas été compressés. Lors du déchargement des données, spécifie que les fichiers déchargés ne sont pas compressés.

Par défaut

AUTO

SNAPPY_COMPRESSION = TRUE | FALSE
Utilisation

Déchargement des données uniquement

Valeurs prises en charge

Remarques

AUTO

Les fichiers déchargés sont compressés à l’aide de l’algorithme de compression Snappy par défaut.

SNAPPY

Peut être spécifié si vous déchargez des fichiers compressés avec Snappy.

NONE

Lors du chargement des données, indique que les fichiers n’ont pas été compressés. Lors du déchargement des données, spécifie que les fichiers déchargés ne sont pas compressés.

Définition

Booléen qui spécifie si les fichiers déchargés sont compressés en utilisant l’algorithme SNAPPY.

Note

Obsolète. Utilisez plutôt COMPRESSION = SNAPPY.

Limites

Uniquement pris en charge pour les opérations de déchargement de données.

Par défaut

TRUE

BINARY_AS_TEXT = TRUE | FALSE
Utilisation

Chargement de données et tables externes

Définition

Booléen qui spécifie s’il faut interpréter les colonnes sans type de données logiques défini comme du texte UTF-8. Lorsqu’il est réglé sur FALSE, Snowflake interprète ces colonnes comme des données binaires.

Par défaut

TRUE

Note

Snowflake vous recommande de définir BINARY_AS_TEXT sur FALSE pour éviter tout problème de conversion éventuel.

TRIM_SPACE = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut supprimer les espaces blancs de début et de fin des chaînes.

Par exemple, si votre logiciel de base de données externe contient des champs entre guillemets, mais insère un espace d’en-tête, Snowflake lit l’espace d’en-tête plutôt que le caractère guillemet comme début du champ (c’est-à-dire que les guillemets sont interprétés comme faisant partie de la chaîne des données du champ). Définissez cette option sur TRUE pour supprimer les espaces indésirables pendant le chargement des données.

Cette option de format de fichier est appliquée aux actions suivantes uniquement lors du chargement de données Parquet dans des colonnes séparées à l’aide de l’option de copie MATCH_BY_COLUMN_NAME.

Par défaut

FALSE

USE_LOGICAL_TYPE = TRUE | FALSE
Utilisation

Chargement de données, interrogation de données dans des fichiers en zone de préparation et détection de schémas.

Définition

Booléen qui spécifie s’il faut utiliser les types logiques Parquet. Avec cette option de format de fichier, Snowflake peut interpréter les types logiques Parquet lors du chargement des données. Pour plus d’informations, consultez Définitions de types logiques Parquet. Pour activer les types logiques Parquet, définissez USE_LOGICAL_TYPE sur TRUE lorsque vous créez une nouvelle option de format de fichier.

Limites

Non pris en charge pour le déchargement de données.

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
Utilisation

Chargement de données et table externe

Définition

Booléen qui spécifie s’il faut remplacer les caractères UTF-8 non valides par le caractère de remplacement Unicode (). Cette option permet de remplacer un caractère par un autre.

Valeurs

S’il est défini sur TRUE, Snowflake remplace les caractères UTF-8 non valides par le caractère de remplacement Unicode.

Si FALSE est défini, l’opération de chargement génère une erreur lorsqu’un codage de caractères UTF-8 non valide est détecté.

Par défaut

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )
Utilisation

Chargement des données uniquement

Définition

Chaîne utilisée pour les conversions entrante et sortante de SQL NULL. Snowflake remplace ces chaînes de la source de chargement des données par SQL NULL. Pour spécifier plus d’une chaîne, mettez la liste des chaînes entre parenthèses et utilisez des virgules pour séparer chaque valeur.

Cette option de format de fichier est appliquée aux actions suivantes uniquement lors du chargement de données Parquet dans des colonnes séparées à l’aide de l’option de copie MATCH_BY_COLUMN_NAME.

Notez que Snowflake convertit toutes les instances de la valeur en NULL, quel que soit le type de données. Par exemple, si 2 est spécifié comme valeur, toutes les instances de 2 sous forme de chaîne ou de nombre sont converties.

Par exemple :

NULL_IF = ('\\N', 'NULL', 'NUL', '')

Notez que cette option peut inclure des chaînes vides.

Par défaut

\\N (c.-à-d. NULL, qui suppose que la valeur ESCAPE_UNENCLOSED_FIELD est \\)

TYPE = XML

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
Utilisation

Chargement des données uniquement

Définition
  • Lors du chargement des données, spécifie l’algorithme de compression actuel pour le fichier de données. Snowflake utilise cette option pour détecter comment un fichier de données déjà compressé a été compressé afin que les données compressées dans le fichier puissent être extraites pour le chargement.

  • Lors du déchargement des données, compresse le fichier de données en utilisant l’algorithme de compression spécifié.

Valeurs

Valeurs prises en charge

Remarques

AUTO

Lors du chargement des données, l’algorithme de compression est détecté automatiquement, sauf pour les fichiers compressés par Brotli, qui ne peuvent actuellement pas être détectés automatiquement. Lors du déchargement des données, les fichiers sont automatiquement compressés en utilisant la valeur par défaut, qui est gzip.

GZIP

BZ2

BROTLI

Doit être spécifié lors du chargement/déchargement de fichiers compressés Brotli.

ZSTD

Zstandard v0.8 (et supérieur) est pris en charge.

DEFLATE

Fichiers compressés Deflate (avec en-tête zlib, RFC1950).

RAW_DEFLATE

Fichiers bruts compressés Deflate (sans en-tête, RFC1951).

NONE

Lors du chargement des données, indique que les fichiers n’ont pas été compressés. Lors du déchargement des données, spécifie que les fichiers déchargés ne sont pas compressés.

Par défaut

AUTO

IGNORE_UTF8_ERRORS = TRUE | FALSE
Utilisation

Chargement de données et table externe

Définition

Booléen qui spécifie si les erreurs d’encodage UTF-8 produisent des conditions d’erreur. Il s’agit d’une syntaxe alternative pour REPLACE_INVALID_CHARACTERS.

Valeurs

Si ce paramètre est réglé sur TRUE, toute séquence UTF-8 non valide est remplacée discrètement par le caractère Unicode U+FFFD (c.-à-d. un « caractère de remplacement »).

Si FALSE est défini, l’opération de chargement génère une erreur lorsqu’un codage de caractères UTF-8 non valide est détecté.

Par défaut

FALSE

PRESERVE_SPACE = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie si l’analyseur XML préserve les espaces d’en-tête et de fin dans le contenu des éléments.

Par défaut

FALSE

STRIP_OUTER_ELEMENT = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie si l’analyseur XML supprime l’élément externe XML, exposant les éléments de 2e niveau comme des documents séparés.

Par défaut

FALSE

DISABLE_SNOWFLAKE_DATA = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie si l’analyseur XML désactive la reconnaissance des balises de données semi-structurées Snowflake.

Par défaut

FALSE

DISABLE_AUTO_CONVERT = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie si l’analyseur XML désactive la conversion automatique des valeurs numériques et booléennes du texte en représentation native.

Par défaut

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE
Utilisation

Chargement de données et table externe

Définition

Booléen qui spécifie s’il faut remplacer les caractères UTF-8 non valides par le caractère de remplacement Unicode (). Cette option permet de remplacer un caractère par un autre.

Valeurs

S’il est défini sur TRUE, Snowflake remplace les caractères UTF-8 non valides par le caractère de remplacement Unicode.

Si FALSE est défini, l’opération de chargement génère une erreur lorsqu’un codage de caractères UTF-8 non valide est détecté.

Par défaut

FALSE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut sauter n’importe quel BOM (marque d’ordre d’octet) présent dans un fichier d’entrée. Une marque BOM est un code de caractère placé au début d’un fichier de données qui définit l’ordre des octets et la forme de l’encodage.

S’il est réglé sur FALSE, Snowflake reconnaît n’importe quel BOM dans les fichiers de données, ce qui pourrait entraîner une erreur BOM ou une fusion dans la première colonne du tableau.

Par défaut

TRUE

Options de copie (copyOptions)

Les options de copie sont utilisées pour charger des données dans et décharger des données de tables.

Vous pouvez spécifier une ou plusieurs des options de copie suivantes (séparées par des espaces, des virgules ou de nouvelles lignes) :

ON_ERROR = CONTINUE | SKIP_FILE | SKIP_FILE_num | 'SKIP_FILE_num%' | ABORT_STATEMENT
Utilisation

Chargement des données uniquement

Définition

Chaîne (constante) qui spécifie le traitement des erreurs pour l’opération de chargement.

Important

Examinez attentivement la valeur de l’option de copie ON_ERROR. La valeur par défaut est appropriée dans les scénarios courants, mais n’est pas toujours la meilleure option.

Valeurs
  • CONTINUE

    Continuer à charger le fichier si des erreurs sont trouvées. L’instruction COPY renvoie un message d’erreur pour un maximum d’une erreur trouvée par fichier de données.

    Notez que la différence entre les valeurs des colonnes ROWS_PARSED et ROWS_LOADED représente le nombre de lignes qui incluent les erreurs détectées. Cependant, chacune de ces lignes peut contenir plusieurs erreurs. Pour voir toutes les erreurs dans les fichiers de données, utilisez le paramètre VALIDATION_MODE ou interrogez la fonction VALIDATE.

  • SKIP_FILE

    Ignorez un fichier lorsqu’une erreur est trouvée.

    Notez que l’action SKIP_FILE met en mémoire tampon un fichier entier, que des erreurs soient trouvées ou non. Pour cette raison, SKIP_FILE est plus lent que CONTINUE ou ABORT_STATEMENT. Ignorer des fichiers volumineux en raison d’un petit nombre d’erreurs pourrait entraîner des retards et des crédits gaspillés. Lorsque vous chargez un grand nombre d’enregistrements à partir de fichiers qui n’ont pas de délimitation logique (par exemple, les fichiers ont été générés automatiquement à des intervalles approximatifs), envisagez de spécifier CONTINUE à la place.

    Modèles complémentaires :

    SKIP_FILE_num (par ex. SKIP_FILE_10)

    Ignorez le fichier lorsque le nombre de lignes d’erreurs trouvées dans le fichier est égal ou supérieur au nombre spécifié.

    'SKIP_FILE_num%' (par ex. 'SKIP_FILE_10%')

    Ignorez un fichier lorsque le pourcentage de lignes d’erreurs trouvées dans le fichier dépasse le pourcentage spécifié.

  • ABORT_STATEMENT

    Abandonnez l’opération de chargement si une erreur est trouvée dans un fichier de données.

    Notez que l’opération de chargement n’est pas abandonnée si le fichier de données est introuvable (par exemple, parce qu’il n’existe pas ou n’est pas accessible), sauf lorsque les fichiers de données explicitement spécifiés dans le paramètre FILES sont introuvables.

Par défaut
Chargement en lot à l’aide de COPY

ABORT_STATEMENT

Snowpipe

SKIP_FILE

SIZE_LIMIT = num
Utilisation

Chargement des données uniquement

Définition

Nombre (> 0) qui spécifie la taille maximale (en octets) des données à charger pour une instruction COPY donnée. Lorsque le seuil est dépassé, l’opération COPY interrompt le chargement des fichiers. Cette option est couramment utilisée pour charger un groupe commun de fichiers en utilisant plusieurs instructions COPY. Pour chaque instruction, la charge de données continue jusqu’à ce que le SIZE_LIMIT spécifié soit dépassé, avant de passer à l’instruction suivante.

Par exemple, supposons que des fichiers dans un chemin d’accès de zone de préparation présentent chacun une taille de 10 MB. Si plusieurs instructions COPY établissent SIZE_LIMIT à 25000000 (25 MB), chacune chargerait 3 fichiers. En d’autres termes, chaque opération COPY serait interrompue après le dépassement du seuil SIZE_LIMIT.

Notez qu’au moins un fichier est chargé, quelle que soit la valeur spécifiée pour SIZE_LIMIT à moins qu’il n’y ait aucun fichier à charger.

Par défaut

null (aucune limite de taille)

PURGE = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut supprimer automatiquement les fichiers de données de la zone de préparation une fois que les données ont été chargées avec succès.

Si cette option est définie sur TRUE, nous faisons de notre mieux pour supprimer les fichiers de données chargés avec succès. Si l’opération de purge échoue pour une raison quelconque, aucune erreur n’est renvoyée actuellement. Nous vous recommandons de répertorier périodiquement les fichiers mis en zone de préparation (à l’aide de LIST) et de supprimer manuellement les fichiers correctement chargés, le cas échéant.

Par défaut

FALSE

RETURN_FAILED_ONLY = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui spécifie s’il faut renvoyer uniquement les fichiers qui n’ont pas réussi à se charger dans le résultat de l’instruction.

Par défaut

FALSE

MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE
Utilisation

Chargement des données uniquement

Définition

Chaîne qui spécifie si elle doit charger des données semi-structurées dans des colonnes de la table cible qui correspondent aux colonnes correspondantes représentées dans les données.

Cette option de copie est prise en charge pour les formats de données suivants :

  • JSON

  • Avro

  • ORC

  • Parquet

Pour qu’une colonne corresponde, les critères suivants doivent être remplis :

  • La colonne représentée dans les données doit avoir exactement le même nom que la colonne de la table. L’option de copie prend en charge la casse pour les noms de colonne. L’ordre des colonnes n’a pas d’importance.

  • La colonne de la table doit avoir un type de données compatible avec les valeurs de la colonne représentée dans les données. Par exemple, la chaîne, le nombre et les valeurs booléennes peuvent tous être chargés dans une colonne de variantes.

Valeurs
CASE_SENSITIVE | CASE_INSENSITIVE

Chargez des données semi-structurées dans des colonnes de la table cible qui correspondent aux colonnes correspondantes représentées dans les données. Les noms de colonne sont sensibles à la casse (CASE_SENSITIVE) ou ne sont pas sensibles à la casse (CASE_INSENSITIVE).

L’opération COPY vérifie qu’au moins une colonne de la table cible correspond à une colonne représentée dans les fichiers de données. Si une correspondance est trouvée, les valeurs des fichiers de données sont chargées dans la ou les colonnes. Si aucune correspondance n’est trouvée, un ensemble de valeurs NULL pour chaque enregistrement des fichiers est chargé dans la table.

Note

  • Si des colonnes supplémentaires non correspondantes sont présentes dans les fichiers de données, les valeurs de ces colonnes ne sont pas chargées.

  • Si des colonnes non correspondantes supplémentaires sont présentes dans la table cible, l’opération COPY insère des valeurs NULL dans ces colonnes. Ces colonnes doivent prendre en charge les valeurs NULL.

  • L’instruction COPY ne permet pas de spécifier une requête pour transformer davantage les données pendant le chargement (c’est-à-dire transformation COPY).

NONE

L’opération COPY charge les données semi-structurées dans une colonne variante ou, si une requête est incluse dans l’instruction COPY, transforme les données.

Note

Les limitations suivantes s’appliquent actuellement :

  • MATCH_BY_COLUMN_NAME ne peut pas être utilisé avec le paramètre VALIDATION_MODE dans une instruction COPY pour valider les données de zone de préparation plutôt que de les charger dans la table cible.

  • Données Parquet uniquement. Lorsque MATCH_BY_COLUMN_NAME est défini sur CASE_SENSITIVE ou CASE_INSENSITIVE, une valeur de colonne vide (par exemple "col1": "") génère une erreur.

Par défaut

NONE

ENFORCE_LENGTH = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Syntaxe alternative pour TRUNCATECOLUMNS avec logique inverse (pour assurer une compatibilité avec les autres systèmes)

Booléen qui spécifie s’il faut tronquer les chaînes de texte qui dépassent la longueur de colonne cible :

  • Si TRUE, l’instruction COPY produit une erreur si une chaîne chargée dépasse la longueur de la colonne cible.

  • Si FALSE, les chaînes sont automatiquement tronquées suivant la longueur de colonne cible.

Cette option de copie prend en charge les données CSV, ainsi que les valeurs de chaîne dans les données semi-structurées lorsqu’elles sont chargées dans des colonnes séparées dans des tables relationnelles.

Note

  • Si la longueur de la colonne de la chaîne de caractères cible est réglée au maximum (par exemple, VARCHAR (16777216)), une chaîne entrante ne peut pas dépasser cette longueur ; sinon, la commande COPY produit une erreur.

  • Ce paramètre est fonctionnellement équivalent à TRUNCATECOLUMNS, mais a le comportement inverse. Il est fourni pour assurer une compatibilité avec d’autres bases de données. Il n’est nécessaire d’inclure qu’un seul de ces deux paramètres dans une instruction COPY pour produire le résultat souhaité.

Par défaut

TRUE

TRUNCATECOLUMNS = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Syntaxe alternative pour ENFORCE_LENGTH avec logique inverse (pour assurer une compatibilité avec les autres systèmes)

Booléen qui spécifie s’il faut tronquer les chaînes de texte qui dépassent la longueur de colonne cible :

  • Si TRUE, les chaînes sont automatiquement tronquées suivant la longueur de colonne cible.

  • Si FALSE, l’instruction COPY produit une erreur si une chaîne chargée dépasse la longueur de la colonne cible.

Cette option de copie prend en charge les données CSV, ainsi que les valeurs de chaîne dans les données semi-structurées lorsqu’elles sont chargées dans des colonnes séparées dans des tables relationnelles.

Note

  • Si la longueur de la colonne de la chaîne de caractères cible est réglée au maximum (par exemple, VARCHAR (16777216)), une chaîne entrante ne peut pas dépasser cette longueur ; sinon, la commande COPY produit une erreur.

  • Ce paramètre est fonctionnellement équivalent à ENFORCE_LENGTH, mais a le comportement inverse. Il est fourni pour assurer une compatibilité avec d’autres bases de données. Il n’est nécessaire d’inclure qu’un seul de ces deux paramètres dans une instruction COPY pour produire le résultat souhaité.

Par défaut

FALSE

FORCE = TRUE | FALSE
Utilisation

Chargement des données uniquement

Définition

Booléen qui demande de charger tous les fichiers, qu’ils aient été chargés précédemment ou non et qu’ils n’aient pas changé depuis leur chargement. Notez que cette option recharge les fichiers, dupliquant potentiellement les données dans une table.

Par défaut

FALSE

Notes sur l’utilisation

  • Les modifications apportées à une table ne sont pas automatiquement propagées aux vues créées sur cette table. Par exemple, si vous détruisez une colonne dans une table et qu’une vue est définie pour inclure cette colonne, la vue n’est plus valide. La vue n’est pas ajustée pour supprimer la colonne.

  • Le fait de supprimer une colonne ne libère pas immédiatement l’espace de stockage de la colonne.

    • L’espace dans chaque micro-partition n’est pas récupéré tant que cette micro-partition n’est pas réécrite. Les opérations d’écriture (insertion, mise à jour, suppression, etc.) sur 1 ou plusieurs lignes de cette micro-partition entraînent la réécriture de la micro-partition. Si vous souhaitez forcer la récupération de l’espace, vous pouvez suivre les étapes suivantes :

      1. Utilisez une instruction CREATE TABLE AS SELECT (CTAS) pour créer une nouvelle table contenant uniquement les colonnes de l’ancienne table que vous souhaitez conserver.

      2. Définissez le paramètre DATA_RETENTION_TIME_IN_DAYS sur 0 pour l’ancienne table (facultatif).

      3. Supprimez la table.

    • Si la table est protégée par la fonctionnalité Time Travel, l’espace utilisé par le stockage Time Travel n’est pas récupéré avant l’expiration de la période de conservation de Time Travel.

  • Si une nouvelle colonne avec une valeur par défaut est ajoutée à une table avec des lignes existantes, toutes les lignes existantes sont remplies avec la valeur par défaut.

  • L’ajout d’une nouvelle colonne avec une valeur par défaut contenant une fonction n’est pas pris en charge actuellement. L’erreur suivante est renvoyée :

    Invalid column default expression (expr)

  • Pour modifier une table, vous devez utiliser un rôle disposant du privilège de propriété sur la table.

  • Pour ajouter un clustering à une table, vous devez également disposer des privilèges USAGE ou OWNERSHIP sur le schéma et la base de données qui contiennent la table.

  • Pour les politiques de masquage :

    • La clause USING et le mot-clé FORCE sont tous deux facultatifs ; ils ne sont pas nécessaires pour définir une politique de masquage sur une colonne. La clause USING et le mot-clé FORCE peuvent être utilisés séparément ou ensemble. Pour plus de détails, voir :

    • Une seule politique de masquage qui utilise des colonnes conditionnelles peut être appliquée à plusieurs tables, à condition que la structure des colonnes de la table corresponde aux colonnes spécifiées dans la politique.

    • Lorsque vous modifiez une ou plusieurs colonnes de la table avec une politique de masquage ou la table elle-même avec une politique d’accès aux lignes, utilisez la fonction POLICY_CONTEXT pour simuler une requête sur la ou les colonnes protégées par une politique de masquage et la table protégée par une politique d’accès aux lignes.

  • Pour les politiques d’accès aux lignes :

    • Snowflake prend en charge l’ajout et la suppression des politiques d’accès aux lignes dans une seule instruction SQL.

      Par exemple, pour remplacer une politique d’accès aux lignes déjà définie sur une table par une politique différente, il faut d’abord détruire la politique d’accès aux lignes, puis ajouter la nouvelle politique d’accès aux lignes.

    • Pour une ressource donnée (c’est-à-dire une table ou une vue), pour ADD ou DROP une politique d’accès aux lignes, vous devez disposer du privilège APPLY ROW ACCESS POLICY sur le schéma, ou du privilège OWNERSHIP sur la ressource et du privilège APPLY sur la ressource de la politique d’accès aux lignes.

    • Une table ou une vue ne peut être protégée que par une seule politique d’accès aux lignes à la fois. L’ajout d’une politique échoue si le corps de la politique fait référence à une colonne de table ou de vue qui est protégée par une politique d’accès aux lignes ou à la colonne protégée par une politique de masquage.

      De même, l’ajout d’une politique de masquage à une colonne de table échoue si le corps de la politique de masquage fait référence à une table qui est protégée par une politique d’accès aux lignes ou une autre politique de masquage.

    • Les politiques d’accès aux lignes ne peuvent pas être appliquées aux vues système ou aux fonctions de table.

    • Comme pour les autres opérations DROP <objet>, Snowflake renvoie une erreur en cas de tentative de destruction d’une politique d’accès aux lignes d’une ressource à laquelle aucune politique d’accès aux lignes n’a été ajoutée.

    • Si un objet possède à la fois une politique d’accès aux lignes et une ou plusieurs politiques de masquage, la politique d’accès aux lignes est évaluée en premier.

  • Si vous créez une clé étrangère, les colonnes de la clause REFERENCES doivent être répertoriées dans le même ordre que les celles répertoriées pour la clé primaire. Par exemple :

    create table parent ... constraint primary_key_1 primary key (c_1, c_2) ...
    create table child  ... constraint foreign_key_1 foreign key (...) REFERENCES parent (c_1, c_2) ...
    
    Copy

    Dans les deux cas, l’ordre des colonnes est c_1, c_2. Si l’ordre des colonnes de la clé étrangère avait été différent (par exemple, c_2, c_1), la tentative de création de la clé étrangère aurait échoué.

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

  • ALTER TABLE … CHANGE_TRACKING = TRUE

    • Lorsqu’une table est modifiée pour permettre le suivi des modifications, elle est verrouillée pour la durée de l’opération. Les verrous peuvent entraîner une latence avec certaines opérations DDL/DML associées. Pour plus d’informations, reportez-vous à Verrouillage des ressources.

Exemples

Les sections suivantes fournissent des exemples d’utilisation de la commande ALTERCOLUMN :

Renommer une table

Voici ce qui crée une table nommée t1 :

CREATE OR REPLACE TABLE t1(a1 number);
Copy
SHOW TABLES LIKE 't1';
Copy
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
| created_on                    | name | database_name | schema_name | kind  | comment | cluster_by | rows | bytes | owner  | retention_time | change_tracking | is_external | enable_schema_evolution | owner_role_type | is_event | budget |
|-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------|
| 2023-10-19 10:37:04.858 -0700 | T1   | TESTDB        | MY_SCHEMA   | TABLE |         |            |    0 |     0 | PUBLIC | 1              | OFF             | N           | N                       | ROLE            | N        | NULL   |
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+

L’instruction suivante modifie le nom de la table en tt1 :

ALTER TABLE t1 RENAME TO tt1;
Copy
SHOW TABLES LIKE 'tt1';
Copy
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
| created_on                    | name | database_name | schema_name | kind  | comment | cluster_by | rows | bytes | owner  | retention_time | change_tracking | is_external | enable_schema_evolution | owner_role_type | is_event | budget |
|-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------|
| 2023-10-19 10:37:04.858 -0700 | TT1  | TESTDB        | MY_SCHEMA   | TABLE |         |            |    0 |     0 | PUBLIC | 1              | OFF             | N           | N                       | ROLE            | N        | NULL   |
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+

Échanger des tables

Les instructions suivantes créent des tables nommées t1 et t2 :

CREATE OR REPLACE TABLE t1(a1 NUMBER, a2 VARCHAR, a3 DATE);
CREATE OR REPLACE TABLE t2(b1 VARCHAR);
Copy
DESC TABLE t1;
Copy
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type              | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1   | NUMBER(38,0)      | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A2   | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A3   | DATE              | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
DESC TABLE t2;
Copy
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type              | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1   | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+

L’instruction suivante échange la table t1 avec la table t2 :

ALTER TABLE t1 SWAP WITH t2;
Copy
DESC TABLE t1;
Copy
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type              | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1   | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
DESC TABLE t2;
Copy
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type              | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1   | NUMBER(38,0)      | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A2   | VARCHAR(16777216) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A3   | DATE              | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+

Ajouter des colonnes

Voici ce qui crée une table nommée t1 :

CREATE OR REPLACE TABLE t1(a1 NUMBER);
Copy
DESC TABLE t1;
Copy
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1   | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+

L’instruction suivante ajoute une colonne nommée a2 à cette table :

ALTER TABLE t1 ADD COLUMN a2 NUMBER;
Copy

L’instruction suivante ajoute une colonne nommée a3 avec une contrainte NOT NULL :

ALTER TABLE t1 ADD COLUMN a3 NUMBER NOT NULL;
Copy

L’instruction suivante ajoute une colonne nommée a4 avec une valeur par défaut et une contrainte NOT NULL :

ALTER TABLE t1 ADD COLUMN a4 NUMBER DEFAULT 0 NOT NULL;
Copy

L’instruction suivante ajoute une colonne VARCHAR nommée a5 avec une spécification de classement spécifique à la langue :

ALTER TABLE t1 ADD COLUMN a5 VARCHAR COLLATE 'en_US';
Copy
DESC TABLE t1;
Copy
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type                              | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1   | NUMBER(38,0)                      | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A2   | NUMBER(38,0)                      | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A3   | NUMBER(38,0)                      | COLUMN | N     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A4   | NUMBER(38,0)                      | COLUMN | N     | 0       | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A5   | VARCHAR(16777216) COLLATE 'en_us' | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+

L’instruction suivante utilise la clause IF NOT EXISTS pour ajouter une colonne nommée a2 uniquement si la colonne n’existe pas. Il existe une colonne existante nommée a2. La spécification de la clause IF NOT EXISTS empêche l’instruction d’échouer avec une erreur.

ALTER TABLE t1 ADD COLUMN IF NOT EXISTS a2 NUMBER;
Copy

Comme le montre le résultat de la commande DESCRIBE TABLE, l’instruction ci-dessus n’a aucun effet sur la colonne existante nommée a2 :

DESC TABLE t1;
Copy
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type                              | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1   | NUMBER(38,0)                      | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A2   | NUMBER(38,0)                      | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A3   | NUMBER(38,0)                      | COLUMN | N     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A4   | NUMBER(38,0)                      | COLUMN | N     | 0       | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A5   | VARCHAR(16777216) COLLATE 'en_us' | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+

Renommage de colonnes

L’instruction suivante modifie le nom de la colonne a1 en b1 :

ALTER TABLE t1 RENAME COLUMN a1 TO b1;
Copy
DESC TABLE t1;
Copy
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1   | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A2   | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A3   | NUMBER(38,0) | COLUMN | N     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A4   | NUMBER(38,0) | COLUMN | N     | 0       | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+

Destruction de colonnes

L’instruction suivante supprime la colonne a2 :

ALTER TABLE t1 DROP COLUMN a2;
Copy
DESC TABLE t1;
Copy
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1   | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A3   | NUMBER(38,0) | COLUMN | N     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A4   | NUMBER(38,0) | COLUMN | N     | 0       | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+

L’instruction suivante utilise la clause IF EXISTS pour supprimer une colonne nommée a2 uniquement si la colonne existe. Il n’existe aucune colonne nommée a2. La spécification de la clause IF EXISTS empêche l’instruction d’échouer avec une erreur.

ALTER TABLE t1 DROP COLUMN IF EXISTS a2;
Copy

Comme le montre le résultat de la commande DESCRIBE TABLE, l’instruction ci-dessus n’a aucun effet sur la table existante :

+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1   | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A3   | NUMBER(38,0) | COLUMN | N     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        |
| A4   | NUMBER(38,0) | COLUMN | N     | 0       | N           | N          | NULL  | NULL       | NULL    | NULL        |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Copy

Ajout, renommage et suppression de colonnes dans une table externe

L’instruction suivante crée une table externe nommée exttable1 :

CREATE EXTERNAL TABLE exttable1
  LOCATION=@mystage/logs/
  AUTO_REFRESH = true
  FILE_FORMAT = (TYPE = PARQUET)
  ;
Copy
DESC EXTERNAL TABLE exttable1;
Copy
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name      | type              | kind      | null? | default | primary key | unique key | check | expression                                               | comment               |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE     | VARIANT           | COLUMN    | Y     | NULL    | N           | N          | NULL  | NULL                                                     | The value of this row |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+

L’instruction suivante ajoute une nouvelle colonne nommée a1 à la table externe :

ALTER TABLE exttable1 ADD COLUMN a1 VARCHAR AS (value:a1::VARCHAR);
Copy
DESC EXTERNAL TABLE exttable1;
Copy
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name      | type              | kind      | null? | default | primary key | unique key | check | expression                                               | comment               |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE     | VARIANT           | COLUMN    | Y     | NULL    | N           | N          | NULL  | NULL                                                     | The value of this row |
| A1        | VARCHAR(16777216) | VIRTUAL   | Y     | NULL    | N           | N          | NULL  | TO_CHAR(GET(VALUE, 'a1'))                                | NULL                  |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+

L’instruction suivante modifie le nom de la colonne a1 en b1 :

ALTER TABLE exttable1 RENAME COLUMN a1 TO b1;
Copy
DESC EXTERNAL TABLE exttable1;
Copy
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name      | type              | kind      | null? | default | primary key | unique key | check | expression                                               | comment               |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE     | VARIANT           | COLUMN    | Y     | NULL    | N           | N          | NULL  | NULL                                                     | The value of this row |
| B1        | VARCHAR(16777216) | VIRTUAL   | Y     | NULL    | N           | N          | NULL  | TO_CHAR(GET(VALUE, 'a1'))                                | NULL                  |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+

L’instruction suivante supprime la colonne nommée b1 :

ALTER TABLE exttable1 DROP COLUMN b1;
Copy
DESC EXTERNAL TABLE exttable1;
Copy
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name      | type              | kind      | null? | default | primary key | unique key | check | expression                                               | comment               |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE     | VARIANT           | COLUMN    | Y     | NULL    | N           | N          | NULL  | NULL                                                     | The value of this row |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+

Modification de l’ordre des clés de clustering

L’instruction suivante crée une table nommée t1 qui est regroupée selon les colonnes id et date :

CREATE OR REPLACE TABLE T1 (id NUMBER, date TIMESTAMP_NTZ, name STRING) CLUSTER BY (id, date);
Copy
SHOW TABLES LIKE 'T1';
Copy
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
           created_on            | name | database_name | schema_name | kind  | comment | cluster_by | rows | bytes |    owner     | retention_time |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
 Tue, 21 Jun 2016 15:42:12 -0700 | T1   | TESTDB        | TESTSCHEMA  | TABLE |         | (ID,DATE)  | 0    | 0     | ACCOUNTADMIN | 1              |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+

L’instruction suivante modifie l’ordre de la clé de clustering :

ALTER TABLE t1 CLUSTER BY (date, id);
Copy
SHOW TABLES LIKE 'T1';
Copy
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
           created_on            | name | database_name | schema_name | kind  | comment | cluster_by | rows | bytes |    owner     | retention_time |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
 Tue, 21 Jun 2016 15:42:12 -0700 | T1   | TESTDB        | TESTSCHEMA  | TABLE |         | (DATE,ID)  | 0    | 0     | ACCOUNTADMIN | 1              |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+

Ajout et suppression de politiques d’accès aux lignes

L’exemple suivant ajoute une politique d’accès aux lignes sur une table en spécifiant une seule colonne. Après avoir défini la politique, vous pouvez vérifier en contrôlant Information Schema.

alter table t1 add row access policy rap_t1 on (empl_id);
Copy

L’exemple suivant ajoute une politique d’accès aux lignes tout en spécifiant deux colonnes dans une seule table.

alter table t1
  add row access policy rap_test2 on (cost, item);
Copy

L’exemple suivant détruit une politique d’accès aux lignes d’une table. Vérifiez que les politiques ont été détruites en interrogeant Information Schema.

alter table t1 drop row access policy rap_v1;
Copy

L’exemple suivant montre comment combiner l’ajout et la destruction de politiques d’accès aux lignes dans une seule instruction SQL pour une table. Vérifiez les résultats en contrôlant Information Schema.

alter table t1
  drop row access policy rap_t1_version_1,
  add row access policy rap_t1_version_2 on (empl_id);
Copy