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
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 peut s'agir de l'une des valeurs suivantes :iceberg_table
-- 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 TABLEdé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.
Table des matières
Mise à niveau vers Iceberg v3
Vous pouvez mettre à niveau une table Iceberg v2 vers la v3 en utilisant ALTER TABLE SET
TABLE PROPERTIES :
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Pour plus de détails, consultez Mise à niveau de la v2 vers la v3.
ALTER TABLE RENAME COLUMN
ALTER TABLEiceberg_tableRENAME [COLUMN]col_nameTOnew_name;
ALTER TABLE RENAME COLUMNrenomme une colonne existante. Il 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.col_name
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 TABLEiceberg_tableADD [COLUMN]col_namecol_type;
ALTER TABLEiceberg_tableDROP [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 TABLEiceberg_tableALTER COLUMNcolumn_nameTYPEupdated_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 TABLEiceberg_table(cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';
Il peut être élargi par cette ALTER déclaration :
ALTER TABLEiceberg_tableALTER 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 TABLEiceberg_tableALTER COLUMNcolumn_nameSET DEFAULTliteral_value; ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameDROP 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 TABLEiceberg_tableSET 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 TABLEiceberg_tableSET 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 TABLEiceberg_tableADD PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableDROP PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableREPLACE PARTITION FIELDcolumn_name|transform_functionWITHcolumn_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
ADDouREPLACE ... 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 TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...;L'erreur suivante échoue car elle
ship_datefait déjà partie d'un champ de partition existant :ALTER TABLEiceberg_tableADD 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 TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(256, item_id);La spécification de partition de table est la même que :
CREATE TABLEiceberg_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 TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableDROP PARTITION FIELD year(ship_date);Ensuite
ALTER, la table est uniquement partitionnée parbucket(256, item_id). -
Lors de l'appel
REPLACE 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 TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableREPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);Ensuite
ALTER, la partition de table devient(month(ship_date), bucket(256, item_id)). -
La
voidtransformation n'est pas prise en charge dans lesALTERinstructions de partition.