View a markdown version of this page

Modifier les définitions des tables - Amazon Redshift

Amazon Redshift ne prendra plus en charge l'utilisation des UDF Python après le 30 juin 2026. Nous allons commencer à l'appliquer par étapes. Pour plus d'informations sur les détails de la fin de vie de Python et des options de migration, consultez le billet de blog publié le 30 juin 2025.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Modifier les définitions des tables

ALTER TABLEles instructions sont utilisées pour modifier les définitions des tables, y compris le schéma, les spécifications de partition et les propriétés. Vous pouvez utiliser ces instructions DDL pour gérer vos tables Iceberg directement via Amazon Redshift.

Toutes les ALTER TABLE instructions prennent en charge l'utilisation de références de schéma externes ou de références de notation en trois parties pour les tables Iceberg. Dans les exemples de syntaxe ci-dessous, il iceberg_table peut s'agir de l'une des valeurs suivantes :

-- External schema notation: <external_schema>.<table_name> -- Three-part notation for S3 table buckets: "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name> -- Three-part notation for the awsdatacatalog root catalog: awsdatacatalog.<database_name>.<table_name>

Pour de plus amples informations, veuillez consulter Référencement de tables Iceberg dans Amazon Redshift.

Lorsque vous utilisez des ALTER TABLE instructions, tenez compte des points suivants :

  • ALTER TABLEles instructions ne prennent actuellement en charge que les tables Iceberg v2 ou v3.

  • Toutes les ALTER TABLE déclarations sont des opérations utilisant uniquement des métadonnées.

  • ALTER TABLEles instructions ne prennent pas en charge les tableaux contenant des colonnes de type complexe.

Mise à niveau vers Iceberg v3

Vous pouvez mettre à niveau une table Iceberg v2 vers la v3 en utilisant ALTER TABLE SET TABLE PROPERTIES :

ALTER TABLE iceberg_table SET TABLE PROPERTIES ('format-version' = '3');

Pour plus de détails, consultez Mise à niveau de la v2 vers la v3.

ALTER TABLE RENAME COLUMN

ALTER TABLE iceberg_table RENAME [COLUMN] col_name TO new_name;

ALTER TABLE RENAME COLUMNrenomme une colonne existante. Il col_name peut s'agir d'une colonne de partition ou d'une colonne non partitionnée. Après le changement de nom, le type de données de colonne et les spécifications de partition ne changent pas.

Note

ALTER TABLE RENAME COLUMNn'est pas pris en charge pour les tables AWS Lake Formation enregistrées.

MODIFIER LA ADD/DROP COLONNE DU TABLEAU

ALTER TABLE iceberg_table ADD [COLUMN] col_name col_type;
ALTER TABLE iceberg_table DROP [COLUMN] col_name;

ADD COLUMNajoute une colonne à un tableau Iceberg existant. Vous pouvez utiliser n'importe quel type de données pris en charge par Amazon Redshift, écrit Iceberg. Pour de plus amples informations, veuillez consulter Types de données pris en charge avec les tables Apache Iceberg.

ADD COLUMNest une opération utilisant uniquement des métadonnées. Les valeurs des colonnes récemment ajoutées sur les lignes existantes sontNULL.

DROP COLUMNsupprime une colonne d'un tableau Iceberg existant. Pour les tables partitionnées, vous ne pouvez pas supprimer une colonne appartenant à la spécification de partition actuelle. Vous devez d'abord supprimer le champ de partition qui concerne la colonne avant de supprimer la colonne. Pour de plus amples informations, veuillez consulter MODIFIER LA TABLE AJOUTER, SUPPRIMER ET REMPLACER LE CHAMP DE PARTITION.

Pour les tables Iceberg v3, vous pouvez spécifier une valeur par défaut lors de l'ajout d'une colonne. Les fichiers de données existants renvoient la valeur par défaut spécifiée au lieu de NULL pour la colonne nouvellement ajoutée sans nécessiter de réécriture des données. Les valeurs de colonne par défaut ne sont prises en charge que pour les tables Iceberg v3. Amazon Redshift renvoie une erreur si vous spécifiez une valeur par défaut dans une table Iceberg v2.

-- External schema notation ALTER TABLE my_external_schema.orders ADD COLUMN priority INT DEFAULT 0; -- Three-part notation (awsdatacatalog / Glue) ALTER TABLE awsdatacatalog.my_glue_db.orders ADD COLUMN priority INT DEFAULT 0; -- Three-part notation (S3 Table Buckets) ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ADD COLUMN priority INT DEFAULT 0;

Pour les lignes existantes, la valeur par défaut est renseignée pour la colonne nouvellement ajoutée :

-- Existing table with rows SELECT id FROM my_external_schema.orders; -- 1 -- 2 -- Add a column with a default ALTER TABLE my_external_schema.orders ADD COLUMN status varchar DEFAULT 'active'; -- Existing rows return the default without a data rewrite SELECT id, status FROM my_external_schema.orders; -- 1 | active -- 2 | active

MODIFIER LE TABLEAU MODIFIER LA COLONNE

ALTER TABLE iceberg_table ALTER COLUMN column_name TYPE updated_data_type;

ALTER TABLE ALTER COLUMNmodifie le type de données d'une colonne existante. Seul l'élargissement du texte est autorisé, pas le rétrécissement. Comme les données ne sont pas réécrites après leALTER, le fait de restreindre les types de données peut entraîner un débordement lors de la consommation des données de table existantes. Les élargissements de type suivants sont autorisés conformément à la spécification Iceberg :

int → bigint float → double decimal(P, S) → decimal(P2, S) where P2 > P (scale cannot be changed)

Dans Amazon Redshift, les types de données peuvent avoir des alias. Par exemple, les entiers sur 4 octets utilisent le nom de type ou. int int4 Tant qu'ils sont mappés à un entier de 4 octets dans les types Iceberg, l'élargissement du type à des entiers de 8 octets est autorisé.

Par exemple, une table Iceberg est créée à l'aide de types entiers à 4 octets :

CREATE TABLE iceberg_table (cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';

Il peut être élargi par cette ALTER déclaration :

ALTER TABLE iceberg_table ALTER COLUMN cint TYPE int8;

Pour obtenir la liste complète des mappages de types de données entre les types Amazon Redshift et les types Iceberg, consultez. Types de données pris en charge avec les tables Apache Iceberg

L'élargissement du type d'une colonne appartenant à la spécification de partition existante n'est pas pris en charge.

Pour les tables Iceberg v3, vous pouvez définir ou supprimer une valeur par défaut sur une colonne existante :

ALTER TABLE iceberg_table ALTER COLUMN column_name SET DEFAULT literal_value; ALTER TABLE iceberg_table ALTER COLUMN column_name DROP DEFAULT;

SET DEFAULT modifie la valeur par défaut d'une colonne existante. La nouvelle valeur par défaut s'applique aux fichiers de données écrits après la modification. Les fichiers de données existants continuent d'utiliser la valeur par défaut précédente.

DROP DEFAULT supprime la valeur par défaut appliquée aux nouvelles écritures, ce qui revient à définir la valeur par défaut sur NULL. Les fichiers de données qui ne contiennent pas la colonne continuent de renvoyer la valeur par défaut initiale de la colonne.

-- External schema notation ALTER TABLE my_external_schema.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE my_external_schema.orders ALTER COLUMN status DROP DEFAULT; -- Three-part notation (awsdatacatalog / Glue) ALTER TABLE awsdatacatalog.my_glue_db.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE awsdatacatalog.my_glue_db.orders ALTER COLUMN status DROP DEFAULT; -- Three-part notation (S3 Table Buckets) ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ALTER COLUMN status DROP DEFAULT;

MODIFIER LES PROPRIÉTÉS DE LA TABLE

ALTER TABLE iceberg_table SET TABLE PROPERTIES ( 'compression_type' = 'compression_value');

Cette instruction vous permet de remplacer la propriété de table par défaut. Actuellement, la seule propriété de table autorisée pour cette instruction estcompression_type. Vous pouvez le remplacer pour utiliser un type de compression différent pour les fichiers Parquet de la table Iceberg. Les données insérées après ALTER utilisent le nouveau type de compression.

Les valeurs possibles compression_type sont les suivantes : brotli gzipsnappy,uncompressed, etzstd.

Vous pouvez également mettre à niveau une table Iceberg v2 existante vers la version v3 en définissant la version du format :

ALTER TABLE iceberg_table SET TABLE PROPERTIES ('format-version' = '3');

Pour plus de détails, consultez Mise à niveau de la v2 vers la v3.

MODIFIER LA TABLE AJOUTER, SUPPRIMER ET REMPLACER LE CHAMP DE PARTITION

ALTER TABLE iceberg_table ADD PARTITION FIELD column_name | transform_function;
ALTER TABLE iceberg_table DROP PARTITION FIELD column_name | transform_function;
ALTER TABLE iceberg_table REPLACE PARTITION FIELD column_name | transform_function WITH column_name | transform_function;

Les [ADD | DROP | REPLACE] PARTITION FIELD instructions vous permettent de modifier la spécification de partition de table existante, en prenant en charge l'évolution des partitions via Amazon Redshift.

Les ALTER instructions relatives à la spécification de la partition modifient uniquement les métadonnées de la table et ne repartitionnent pas les données de table existantes. Après celaALTER, les nouvelles données insérées dans le tableau suivent la spécification de partition nouvellement définie.

Tenez compte des limites suivantes pour ces déclarations :

  • Lorsque vous définissez un nouveau champ de partition via ADD ouREPLACE ... WITH ..., le nouveau champ ne peut pas inclure une colonne qui fait déjà partie d'autres champs de partition. Il s'agit de la même limitation que lorsque vous définissez la spécification de partition initiale àCREATE TABLE. Pour de plus amples informations, veuillez consulter CREATE TABLE.

    Par exemple, lorsque vous avez un tableau :

    CREATE TABLE iceberg_table ... PARTITIONED BY year(ship_date) USING ICEBERG ...;

    L'erreur suivante échoue car elle ship_date fait déjà partie d'un champ de partition existant :

    ALTER TABLE iceberg_table ADD PARTITION FIELD bucket(128, ship_date);
  • Lors de l'ajout d'un nouveau champ de partition, le champ nouvellement ajouté est toujours traité comme le dernier niveau de partition de la table. Par exemple :

    CREATE TABLE iceberg_table ... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLE iceberg_table ADD PARTITION FIELD bucket(256, item_id);

    La spécification de partition de table est la même que :

    CREATE TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...;
  • Lorsque vous supprimez un champ de partition, celui-ci n'est pas limité au dernier niveau de partition. Vous pouvez supprimer n'importe quel champ de partition existant. Par exemple :

    CREATE TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLE iceberg_table DROP PARTITION FIELD year(ship_date);

    EnsuiteALTER, la table est uniquement partitionnée parbucket(256, item_id).

  • Lors de l'appelREPLACE PARTITION FIELD ... WITH ..., le champ de partition à remplacer peut être n'importe quel champ de la spécification et n'est pas limité au dernier champ. Par exemple :

    CREATE TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLE iceberg_table REPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);

    EnsuiteALTER, la partition de table devient(month(ship_date), bucket(256, item_id)).

  • La void transformation n'est pas prise en charge dans les ALTER instructions de partition.