View a markdown version of this page

Modificación de las definiciones de las tablas - Amazon Redshift

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.

Modificación de las definiciones de las tablas

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.

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.

ALTER TABLE RENAME COLUMN

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

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

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.

ALTER TABLE ALTER COLUMN

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

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

ALTER TABLE SET TABLE PROPERTIES

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

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.

    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.