

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Modificación de las definiciones de las tablas
<a name="iceberg-alter-table"></a>

Las instrucciones `ALTER TABLE` se utilizan para cambiar las definiciones de las tablas, incluidos el esquema, las especificaciones de las particiones y las propiedades. Puede utilizar estas instrucciones DDL para administrar las tablas de Iceberg directamente a través de Amazon Redshift.

Todas las instrucciones `ALTER TABLE` admiten el uso de referencias de esquema externas o referencias de notación de tres partes para las tablas de Iceberg. En los ejemplos de sintaxis siguientes, `{{iceberg_table}}` puede ser cualquiera de los siguientes:

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

Para obtener más información, consulte [Tablas de Iceberg de referencia en Amazon Redshift](referencing-iceberg-tables.md).

Tenga en cuenta lo siguiente al usar instrucciones `ALTER TABLE`:
+ Las instrucciones `ALTER TABLE` solo son compatibles actualmente con las tablas de Iceberg v2.
+ Todas las instrucciones `ALTER TABLE` son operaciones que se basan únicamente en metadatos.
+ Las instrucciones `ALTER TABLE` no admiten tablas con columnas de tipo complejo.

**Contents**
+ [ALTER TABLE RENAME COLUMN](#iceberg-alter-table-rename-column)
+ [ALTER TABLE ADD/DROP COLUMN](#iceberg-alter-table-add-drop-column)
+ [ALTER TABLE ALTER COLUMN](#iceberg-alter-table-alter-column)
+ [ALTER TABLE SET TABLE PROPERTIES](#iceberg-alter-table-set-properties)
+ [ALTER TABLE ADD, DROP y REPLACE PARTITION FIELD](#iceberg-alter-table-partition-field)

## ALTER TABLE RENAME COLUMN
<a name="iceberg-alter-table-rename-column"></a>

```
ALTER TABLE {{iceberg_table}}
RENAME [COLUMN] {{col_name}} TO {{new_name}};
```

`ALTER TABLE RENAME COLUMN` cambia el nombre de una columna existente. `{{col_name}}` puede ser una columna de partición o una columna no particionada. Tras el cambio de nombre, el tipo de datos de la columna y las especificaciones de la partición no cambian.

**nota**  
`ALTER TABLE RENAME COLUMN` no se admite en las tablas registradas AWS Lake Formation.

## ALTER TABLE ADD/DROP COLUMN
<a name="iceberg-alter-table-add-drop-column"></a>

```
ALTER TABLE {{iceberg_table}}
ADD [COLUMN] {{col_name}} {{col_type}};
```

```
ALTER TABLE {{iceberg_table}}
DROP [COLUMN] {{col_name}};
```

`ADD COLUMN` añade una columna a una tabla de Iceberg existente. Puede utilizar cualquier tipo de datos compatible con escrituras de Amazon Redshift Iceberg. Para obtener más información, consulte [Tipos de datos compatibles con las tablas de Apache IcebergTipos de datos compatibles](querying-iceberg-supported-data-types.md).

`ADD COLUMN` es una operación que solo utiliza metadatos. Los valores de las columnas recién añadidas en las filas existentes son `NULL`.

`DROP COLUMN` elimina una columna de una tabla de Iceberg existente. En el caso de las tablas particionadas, no puede eliminar una columna que pertenezca a la especificación de partición actual. Primero debe eliminar el campo de partición que incluye la columna para poder eliminarla. Para obtener más información, consulte [ALTER TABLE ADD, DROP y REPLACE PARTITION FIELD](#iceberg-alter-table-partition-field).

## ALTER TABLE ALTER COLUMN
<a name="iceberg-alter-table-alter-column"></a>

```
ALTER TABLE {{iceberg_table}}
    ALTER COLUMN {{column_name}} TYPE {{updated_data_type}};
```

`ALTER TABLE ALTER COLUMN` cambia el tipo de datos de una columna existente. Solo se permite la ampliación del texto, no la reducción. Como los datos no se vuelven a escribir después de `ALTER`, reducir los tipos de datos podría provocar un desbordamiento al consumir los datos de la tabla existente. Según la especificación de Iceberg, se permiten las siguientes ampliaciones de tipos:

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

En Amazon Redshift, los tipos de datos pueden tener alias. Por ejemplo, los enteros de 4 bytes utilizan el nombre de tipo `int` o `int4`. Siempre que estén asignados a int de 4 bytes en los tipos de Iceberg, se permite la ampliación de tipo a enteros de 8 bytes.

Por ejemplo, una tabla Iceberg se crea con tipos de enteros de 4 bytes:

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

Se puede ampliar con esta instrucción `ALTER`:

```
ALTER TABLE {{iceberg_table}} ALTER COLUMN cint TYPE int8;
```

Para ver la lista completa de asignaciones de tipos de datos entre los tipos de Amazon Redshift y los tipos de Iceberg, consulte [Tipos de datos compatibles con las tablas de Apache IcebergTipos de datos compatibles](querying-iceberg-supported-data-types.md).

No se permite ampliar el tipo de columna que pertenece a la especificación de partición existente.

## ALTER TABLE SET TABLE PROPERTIES
<a name="iceberg-alter-table-set-properties"></a>

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

Esta instrucción le permite sobrescribir la propiedad de tabla predeterminada. Actualmente, la única propiedad de tabla permitida para esta instrucción es `compression_type`. Puede sobrescribirla para usar un tipo de compresión diferente para los archivos Parquet de la tabla Iceberg. Los datos insertados después de `ALTER` utilizan el nuevo tipo de compresión.

Los valores posibles de `compression_type` son `brotli`, `gzip`, `snappy`, `uncompressed` y `zstd`.

## ALTER TABLE ADD, DROP y REPLACE PARTITION FIELD
<a name="iceberg-alter-table-partition-field"></a>

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

Las instrucciones `[ADD | DROP | REPLACE] PARTITION FIELD` le permiten cambiar la especificación de partición de la tabla existente, lo que permite la evolución de la partición a través de Amazon Redshift.

Las instrucciones `ALTER` para la especificación de particiones solo cambian los metadatos de la tabla y no vuelven a particionar los datos de la tabla existente. Después de `ALTER`, los nuevos datos insertados en la tabla siguen la especificación de partición recién definida.

Tenga en cuenta las siguientes limitaciones de estas instrucciones:
+ Al definir un nuevo campo de partición mediante `ADD` o `REPLACE ... WITH ...`, el nuevo campo no puede incluir una columna que ya forme parte de otros campos de partición. Esta es la misma limitación que cuando se define la especificación de partición inicial en `CREATE TABLE`. Para obtener más información, consulte [CREATE TABLE](iceberg-writes-sql-syntax.md#iceberg-writes-create-table).

  Por ejemplo, cuando tiene una tabla:

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

  Lo siguiente falla porque `ship_date` ya forma parte de un campo de partición existente:

  ```
  ALTER TABLE {{iceberg_table}} ADD PARTITION FIELD bucket(128, ship_date);
  ```
+ Al añadir un nuevo campo de partición, el campo recién añadido siempre se trata como el último nivel de partición de la tabla. Por ejemplo:

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

  La especificación de partición de la tabla es la misma que:

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY (year(ship_date), bucket(256, item_id))
      USING ICEBERG ...;
  ```
+ Al eliminar un campo de partición, no se limita al último nivel de partición. Puede eliminar cualquier campo de partición existente. Por ejemplo:

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

  Después de este `ALTER`, la tabla solo se particiona por `bucket(256, item_id)`.
+ Al llamar a `REPLACE PARTITION FIELD ... WITH ...`, el campo de partición que se va a reemplazar puede ser cualquier campo de la especificación y no se limita al último campo. Por ejemplo:

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

  Después de este `ALTER`, la partición de la tabla se convierte en `(month(ship_date), bucket(256, item_id))`.
+ La transformación `void` no se admite en instrucciones `ALTER` de partición.