View a markdown version of this page

Modification des définitions de tables - Amazon Redshift

Amazon Redshift ne prendra plus en charge la création de nouveaux UDFs Python à partir du patch 198. Les fonctions Python définies par l’utilisateur existantes continueront de fonctionner normalement jusqu’au 30 juin 2026. Pour plus d’informations, consultez le billet de blog .

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.

Modification des définitions de tables

ALTER TABLEles instructions sont utilisées pour modifier les définitions des tables, notamment 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 options 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 des 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.

  • Toutes les ALTER TABLE instructions sont des opérations portant uniquement sur les métadonnées.

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

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 à une table Iceberg existante. Vous pouvez utiliser n'importe quel type de données pris en charge par les écritures Amazon Redshift 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 portant uniquement sur les métadonnées. Les valeurs des colonnes récemment ajoutées sur les lignes existantes sontNULL.

DROP COLUMNsupprime une colonne d'une table Iceberg existante. 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 la supprimer. Pour de plus amples informations, veuillez consulter MODIFIER LE CHAMP DE PARTITION DE LA TABLE AJOUTER, SUPPRIMER ET REMPLACER.

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 type est autorisé, pas le rétrécissement. Comme les données ne sont pas réécrites après leALTER, le rétrécissement des 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 de 4 octets utilisent le nom int du type ou. int4 Tant qu'ils sont mappés à des entiers de 4 octets dans les types Iceberg, l'élargissement de type à des entiers de 8 octets est autorisé.

Par exemple, une table Iceberg est créée à l'aide de types entiers de 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.

MODIFIER LES PROPRIÉTÉS D'UN ENSEMBLE DE TABLES

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 l'ALTERutilisation du nouveau type de compression.

Les valeurs possibles pour compression_type sont : brotligzip,snappy,uncompressed, etzstd.

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

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 les spécifications de partition de table existantes, en prenant en charge l'évolution des partitions via Amazon Redshift.

Les ALTER instructions pour la spécification de partition modifient uniquement les métadonnées de la table et ne repartitionnent pas les données de la table existante. Après leALTER, les nouvelles données insérées dans la table 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 une table :

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

    L'opération 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 considéré 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);

    Après celaALTER, 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.