ALTER ICEBERG TABLE … ALTER COLUMN … SET DATA TYPE

Note

Cette variante de la syntaxe n’est pas prise en charge pour les tables Iceberg qui utilisent un catalogue externe.

Modifie (fait évoluer) une colonne de type structuré vers une table Apache Iceberg gérée par Snowflake.

Cette commande vous permet de modifier les types structurés d’une colonne de table Iceberg. Vous pouvez soit renommer une clé dans un OBJECT structuré, soit effectuer une combinaison des modifications suivantes :

  • Évolution du type d’un champ au sein d’un type structuré.

  • Réorganisation des clés dans un OBJECT structuré.

  • Ajout de clés à un OBJECT structuré.

  • Suppression de clés d’un OBJECT structuré.

Vous ne pouvez pas combiner le renommage d’une clé avec d’autres modifications.

Par souci de concision, cette rubrique fait référence aux tables Iceberg en les appelant simplement « tables », sauf lorsqu’il est nécessaire de faire la distinction entre les tables Iceberg et les tables Snowflake standards.

Voir aussi :

CREATE ICEBERG TABLE , DROP ICEBERG TABLE , SHOW ICEBERG TABLES , DESCRIBE ICEBERG TABLE

Syntaxe

Modifier une colonne de type structuré

ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> ALTER COLUMN <structured_column>
  SET DATA TYPE <new_structured_type>
Copy

Renommer les clés d’un OBJECT structuré

ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> ALTER COLUMN <structured_column>
  SET DATA TYPE <new_structured_type>
  RENAME FIELDS
Copy

Paramètres

table_name

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

Pour plus d’informations, voir Exigences relatives à l’identificateur.

ALTER COLUMN structured_column

Spécifie la colonne de type structuré à modifier.

Si l’identificateur contient des espaces ou des caractères spéciaux, toute la chaîne doit être délimitée par des guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus d’informations, voir Exigences relatives à l’identificateur.

SET DATA TYPE new_structured_type

Spécification complète du nouveau type structuré à utiliser pour la colonne. Par exemple, pour spécifier un ARRAY de NUMBER éléments, utilisez ARRAY(NUMBER).

Pour plus d’informations, voir Spécification d’un type structuré et les exemples de cette page.

RENAME FIELDS

Spécifie que la commande doit renommer une ou plusieurs clés d’un OBJECT structuré. L’ancienne et la nouvelle clés ne doivent différer que par leur nom et doivent avoir exactement la même hiérarchie et les mêmes types de données. Le fait de renommer les clés ne modifie pas les IDs de champ.

Le renommage de clés ne peut pas être combiné avec d’autres modifications des types structurés dans une table Iceberg.

Voir l”exemple RENAME FIELDS.

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

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

Privilège

Objet

Remarques

OWNERSHIP

Table Iceberg

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

USAGE

Volume externe

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

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

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

Notes sur l’utilisation

  • Cette commande ne prend pas en charge les actions suivantes :

    • Évolution d’un type structuré vers un type non structuré (ou l’inverse).

    • Définition d’une contrainte nulle sur un élément d’ARRAY structuré ou sur les paires clé-valeur d’une MAP structurée.

    • Utilisation de RENAME FIELDS pour renommer une clé qui fait partie de la clé de clustering de la table.

    • Modification de la contrainte NULL d’un OBJECT structuré.

  • Pour les tables qui utilisent des politiques d’accès aux données, assurez-vous que le nouveau type de données d’une colonne est compatible avec le type d’argument de votre politique d’accès aux données. Dans le cas contraire, l’interrogation de la table risque d’échouer. Par exemple, si vous ajoutez une clé à une colonne d’OBJECT structuré, vous devez modifier votre politique ou en créer une nouvelle et l’appliquer à votre table.

  • Concernant les métadonnées :

    Attention

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

Exemples

Évolution des types

Vous pouvez faire évoluer le type d’un champ vers un type structuré. Faire évoluer le type signifie l’élargir à un type de données Iceberg associé plus vaste.

Snowflake prend en charge les évolutions de type suivantes, conformément à la spécification Apache Iceberg:

  • Transformation d’un champ de type int en type long.

  • Transformation d’un champ de type float en type double.

  • Transformation d’un champ de type decimal(p,s) en type decimal(p',s), où p est inférieur à p'.

Pour faire évoluer un type de champ, utilisez la syntaxe Snowflake pour spécifier un type structuré. Vous pouvez utiliser le type de données Iceberg dans votre spécification. Par exemple, l’instruction suivante modifie le type d’élément d’une colonne d’ARRAY structuré en type (Iceberg) long.

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN col1
  SET DATA TYPE ARRAY(long);
Copy

Pour des informations sur le mappage des types de données Iceberg vers les types de données Snowflake, voir Types de données des tables Apache Iceberg™.

Réorganisation des clés

Pour modifier l’ordre des clés d’un OBJECT structuré, spécifiez un nouvel ordre dans votre instruction ALTER ICEBERG TABLE. Le changement de l’ordre des clés n’affecte pas les données de l’OBJECT.

Par exemple, considérons l’instruction CREATE ICEBERG TABLE suivante. La table comporte une colonne (column_1) de type OBJECT avec deux clés dans un ordre spécifié :

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_a int,
      key_b int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';
Copy

La commande suivante modifie l’ordre des clés de sorte que key_b précède key_a :

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_b int,
    key_a int
  );
Copy

Ajout de clés

Vous pouvez ajouter des clés à un OBJECT structuré. Une nouvelle clé peut utiliser pour sa valeur n’importe lequel des types de données pris en charge pour les tables Iceberg.

Note

Vous ne pouvez pas définir de contrainte nulle lorsque vous ajoutez une clé, car Snowflake définit la valeur de la clé sur NULL pour toutes les lignes existantes de la table.

Par exemple, considérons l’instruction CREATE ICEBERG TABLE suivante. La table comporte une colonne (column_1) de type OBJECT avec une clé (key_1) :

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';
Copy

La commande suivante ajoute une clé nommée key_2 à column_1 :

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_1 int,
    key_2 int
  );
Copy

Suppression de clés

Note

La suppression d’une clé dont la valeur est un type de données structuré appartenant à une clé de clustering n’est pas pris en charge.

Pour supprimer une clé d’un OBJECT structuré, utilisez la commande ALTER ICEBERG TABLE … ALTER COLUMN pour redéfinir l’OBJECT.

La suppression de la clé supprime la clé et sa valeur de toutes les lignes de la table.

Par exemple, considérons l’instruction CREATE ICEBERG TABLE suivante. La table comporte une colonne (column_1) de type OBJECT avec deux clés :

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int,
      key_2 ARRAY(string)
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';
Copy

La commande suivante supprime la clé nommée key_2 en l’omettant de la spécification OBJECT :

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_1 int
  );
Copy

Renommage de clés

Pour modifier les noms de clé d’un OBJECT structuré, utilisez les mots-clés RENAME FIELDS.

Par exemple, considérons l’instruction CREATE ICEBERG TABLE suivante :

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int,
      key_2 int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';
Copy

La commande suivante utilise RENAME FIELDS pour renommer les clés de column_1 :

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    k_1 int,
    k_2 int
  )
  RENAME FIELDS;
Copy