Amazon Redshift dejará de admitir la creación de UDF de Python después del 30 de junio de 2026. Empezaremos a aplicarlo por fases. Para obtener más información sobre los detalles del fin de vida de Python y las opciones de migración, consulte la entrada 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, puede ser cualquiera de los siguientes: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>
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 TABLEsolo son compatibles actualmente con las tablas de Iceberg v2 o v3. -
Todas las instrucciones
ALTER TABLEson operaciones que se basan únicamente en metadatos. -
Las instrucciones
ALTER TABLEno admiten tablas con columnas de tipo complejo.
Contenido
Actualización a Iceberg v3
Puede actualizar una tabla de Iceberg v2 a v3 mediante ALTER TABLE SET
TABLE PROPERTIES:
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Para obtener más información, consulte Actualización de v2 a v3.
ALTER TABLE RENAME COLUMN
ALTER TABLEiceberg_tableRENAME [COLUMN]col_nameTOnew_name;
ALTER TABLE RENAME COLUMN cambia el nombre de una columna existente. 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.col_name
nota
ALTER TABLE RENAME COLUMN no se admite en las tablas registradas AWS Lake Formation.
ALTER TABLE ADD/DROP COLUMN
ALTER TABLEiceberg_tableADD [COLUMN]col_namecol_type;
ALTER TABLEiceberg_tableDROP [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.
Para las tablas de Iceberg v3, puede especificar un valor predeterminado al agregar una columna. Los archivos de datos existentes devuelven el valor predeterminado especificado en lugar de NULL para la columna recién agregada sin necesidad de volver a escribir los datos. Los valores de columna predeterminados solo se admiten en las tablas de Iceberg v3. Amazon Redshift devuelve un error si especifica un valor predeterminado en una tabla de 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;
En el caso de las filas existentes, se rellena el valor predeterminado para la columna recién agregada:
-- 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
ALTER TABLE ALTER COLUMN
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameTYPEupdated_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 TABLEiceberg_table(cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';
Se puede ampliar con esta instrucción ALTER:
ALTER TABLEiceberg_tableALTER 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.
Para las tablas de Iceberg v3, puede establecer o eliminar un valor predeterminado en una columna existente:
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameSET DEFAULTliteral_value; ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameDROP DEFAULT;
SET DEFAULT cambia el valor predeterminado de una columna existente. El nuevo valor predeterminado se aplica a los archivos de datos escritos después del cambio. Los archivos de datos existentes siguen utilizando el valor predeterminado anterior.
DROP DEFAULT elimina el valor predeterminado que se aplica a las nuevas escrituras, lo que equivale a establecer el valor predeterminado en NULL. Los archivos de datos que no contienen la columna siguen devolviendo el valor predeterminado inicial de la columna.
-- 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;
ALTER TABLE SET TABLE PROPERTIES
ALTER TABLEiceberg_tableSET 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.
También puede actualizar una tabla de Iceberg v2 existente a v3 configurando la versión del formato:
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Para obtener más información, consulte Actualización de v2 a v3.
ALTER TABLE ADD, DROP y REPLACE PARTITION FIELD
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;
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
ADDoREPLACE ... 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 enCREATE TABLE. Para obtener más información, consulte CREATE TABLE.Por ejemplo, cuando tiene una tabla:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...;Lo siguiente falla porque
ship_dateya forma parte de un campo de partición existente:ALTER TABLEiceberg_tableADD 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 TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(256, item_id);La especificación de partición de la tabla es la misma que:
CREATE TABLEiceberg_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 TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableDROP PARTITION FIELD year(ship_date);Después de este
ALTER, la tabla solo se particiona porbucket(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 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);Después de este
ALTER, la partición de la tabla se convierte en(month(ship_date), bucket(256, item_id)). -
La transformación
voidno se admite en instruccionesALTERde partición.