View a markdown version of this page

Modifica delle definizioni delle tabelle - Amazon Redshift

Amazon Redshift non supporterà più l'uso delle UDF Python dopo il 30 giugno 2026. Inizieremo ad applicarlo per fasi. Per ulteriori informazioni sulla fine del ciclo di vita e sulle opzioni di migrazione di Python, consulta il post del blog pubblicato il 30 giugno 2025.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Modifica delle definizioni delle tabelle

ALTER TABLEle istruzioni vengono utilizzate per modificare le definizioni delle tabelle, inclusi lo schema, le specifiche delle partizioni e le proprietà. Puoi utilizzare queste istruzioni DDL per gestire le tabelle Iceberg direttamente tramite Amazon Redshift.

Tutte le ALTER TABLE istruzioni supportano l'uso di riferimenti a schemi esterni o riferimenti di notazione in tre parti per le tabelle Iceberg. Negli esempi di sintassi seguenti, iceberg_table può essere una delle seguenti:

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

Per ulteriori informazioni, consulta Riferimento alle tabelle Iceberg in Amazon Redshift.

Quando si utilizzano le ALTER TABLE dichiarazioni, si consideri quanto segue:

  • ALTER TABLEle dichiarazioni attualmente supportano solo le tabelle Iceberg v2 o v3.

  • Tutte le ALTER TABLE istruzioni sono operazioni basate solo sui metadati.

  • ALTER TABLEle istruzioni non supportano tabelle con colonne di tipo complesso.

Aggiornamento a Iceberg v3

Puoi aggiornare una tabella Iceberg v2 alla v3 usando: ALTER TABLE SET TABLE PROPERTIES

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

Per ulteriori dettagli, consulta Aggiornamento da v2 a v3.

ALTER TABLE RENAME COLUMN

ALTER TABLE iceberg_table RENAME [COLUMN] col_name TO new_name;

ALTER TABLE RENAME COLUMNrinomina una colonna esistente. col_namePuò essere una colonna di partizione o una colonna non partizionata. Dopo la ridenominazione, il tipo di dati della colonna e le specifiche di partizione non cambiano.

Nota

ALTER TABLE RENAME COLUMNnon è supportato per AWS Lake Formation le tabelle registrate.

MODIFICA ADD/DROP COLONNA DELLA TABELLA

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

ADD COLUMNaggiunge una colonna a una tabella Iceberg esistente. Puoi utilizzare qualsiasi tipo di dati supportato da Amazon Redshift Iceberg Writes. Per ulteriori informazioni, consulta Tipi di dati supportati con le tabelle Apache Iceberg.

ADD COLUMNè un'operazione basata solo sui metadati. I valori delle nuove colonne aggiunte nelle righe esistenti sono. NULL

DROP COLUMNelimina una colonna da una tabella Iceberg esistente. Per le tabelle partizionate, non è possibile eliminare una colonna che appartiene alla specifica di partizione corrente. È necessario rimuovere il campo di partizione che riguarda la colonna prima di eliminare la colonna. Per ulteriori informazioni, consulta ALTER TABLE ADD, DROP e REPLACE PARTITION FIELD.

Per le tabelle Iceberg v3, è possibile specificare un valore predefinito quando si aggiunge una colonna. I file di dati esistenti restituiscono il valore predefinito specificato anziché NULL per la colonna appena aggiunta senza richiedere una riscrittura dei dati. I valori di colonna predefiniti sono supportati solo per le tabelle Iceberg v3. Amazon Redshift restituisce un errore se si specifica un valore predefinito su una tabella 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;

Per le righe esistenti, viene inserito il valore predefinito per la colonna appena aggiunta:

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

MODIFICA TABELLA MODIFICA COLONNA

ALTER TABLE iceberg_table ALTER COLUMN column_name TYPE updated_data_type;

ALTER TABLE ALTER COLUMNmodifica il tipo di dati di una colonna esistente. È consentito solo l'allargamento del tipo, non il restringimento. Poiché i dati non vengono riscritti dopo ilALTER, il restringimento dei tipi di dati potrebbe causare un overflow quando si consumano i dati della tabella esistente. In base alle specifiche Iceberg sono consentiti i seguenti ampliamenti dei tipi:

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

In Amazon Redshift, i tipi di dati possono avere alias. Ad esempio, i numeri interi a 4 byte utilizzano il nome del tipo o. int int4 Purché siano mappati su int a 4 byte nei tipi Iceberg, è consentito l'ampliamento del tipo a numeri interi a 8 byte.

Ad esempio, una tabella Iceberg viene creata utilizzando tipi di numeri interi a 4 byte:

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

Può essere ampliata con questa dichiarazione: ALTER

ALTER TABLE iceberg_table ALTER COLUMN cint TYPE int8;

Per l'elenco completo delle mappature dei tipi di dati tra i tipi di Amazon Redshift e i tipi Iceberg, consulta. Tipi di dati supportati con le tabelle Apache Iceberg

L'ampliamento del tipo di colonna che appartiene alle specifiche di partizione esistenti non è supportato.

Per le tabelle Iceberg v3, puoi impostare o rimuovere un valore predefinito su una colonna esistente:

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

SET DEFAULT modifica il valore predefinito di una colonna esistente. La nuova impostazione predefinita si applica ai file di dati scritti dopo la modifica. I file di dati esistenti continuano a utilizzare l'impostazione predefinita precedente.

DROP DEFAULT rimuove il valore predefinito applicato alle nuove scritture, equivalente all'impostazione del valore predefinito su NULL. I file di dati che non contengono la colonna continuano a restituire il valore predefinito iniziale della colonna.

-- 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;

MODIFICA LE PROPRIETÀ DELLA TABELLA IMPOSTA LA TABELLA

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

Questa istruzione consente di sovrascrivere la proprietà predefinita della tabella. Attualmente l'unica proprietà della tabella consentita per questa istruzione ècompression_type. È possibile sovrascriverla per utilizzare un tipo di compressione diverso per i file Parquet della tabella Iceberg. Dati inseriti dopo aver ALTER utilizzato il nuovo tipo di compressione.

I valori possibili per compression_type sono: brotligzip,snappy,uncompressed, ezstd.

Puoi anche aggiornare una tabella Iceberg v2 esistente alla v3 impostando la versione del formato:

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

Per ulteriori dettagli, consulta Aggiornamento da v2 a v3.

ALTER TABLE ADD, DROP e REPLACE PARTITION FIELD

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;

Le [ADD | DROP | REPLACE] PARTITION FIELD istruzioni consentono di modificare le specifiche di partizione della tabella esistenti, supportando l'evoluzione della partizione tramite Amazon Redshift.

Le ALTER istruzioni relative alle specifiche di partizione modificano solo i metadati della tabella e non ripartizionano i dati della tabella esistente. SuccessivamenteALTER, i nuovi dati inseriti nella tabella seguono le specifiche di partizione appena definite.

Considerate le seguenti limitazioni per queste dichiarazioni:

  • Quando si definisce un nuovo campo di partizione tramite ADD oREPLACE ... WITH ..., il nuovo campo non può includere una colonna che fa già parte di altri campi di partizione. Questa è la stessa limitazione di quando si definiscono le specifiche di partizione iniziali in. CREATE TABLE Per ulteriori informazioni, consulta CREATE TABLE.

    Ad esempio, quando hai una tabella:

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

    Quanto segue ha esito negativo perché ship_date fa già parte di un campo di partizione esistente:

    ALTER TABLE iceberg_table ADD PARTITION FIELD bucket(128, ship_date);
  • Quando si aggiunge un nuovo campo di partizione, il campo appena aggiunto viene sempre considerato come l'ultimo livello di partizione della tabella. Ad esempio:

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

    Le specifiche di partizione della tabella sono le stesse di:

    CREATE TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...;
  • Quando si elimina un campo di partizione, non si limita all'ultimo livello di partizione. Puoi eliminare qualsiasi campo di partizione esistente. Ad esempio:

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

    DopodichéALTER, la tabella viene partizionata solo da. bucket(256, item_id)

  • Quando si chiamaREPLACE PARTITION FIELD ... WITH ..., il campo di partizione da sostituire può essere qualsiasi campo della specifica e non è limitato all'ultimo campo. Ad esempio:

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

    DopodichéALTER, la partizione della tabella diventa. (month(ship_date), bucket(256, item_id))

  • La void trasformazione non è supportata nelle istruzioni di partizione. ALTER