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, 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. -
Todas las instrucciones
ALTER TABLEson operaciones que se basan únicamente en metadatos. -
Las instrucciones
ALTER TABLEno admiten tablas con columnas de tipo complejo.
Contenido
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.
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.
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.
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.