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
Comandos SQL
Las tablas de Apache Iceberg en Amazon Redshift proporcionan una forma eficaz de administrar grandes conjuntos de datos de análisis en el lago de datos. Estas tablas admiten las transacciones ACID, la evolución de los esquemas y las capacidades de viajar en el tiempo, a la vez que mantienen un alto rendimiento para las cargas de trabajo de análisis. Con las tablas de Apache Iceberg, puede organizar y particionar los datos de manera eficiente, controlar los formatos y la compresión de los archivos e integrarlos sin problemas con otros servicios de AWS.
Puede crear tablas de Iceberg particionadas y no particionadas mediante los comandos CREATE TABLE
... USING ICEBERG y CREATE TABLE ... USING ICEBERG AS SELECT. Puede hacer referencia a las tablas de iceberg mediante una notación de esquema externa (external_schema.table_name) o una notación de tres partes ("catalog_name".database_name.table_name). Los ejemplos de esta sección demuestran ambos métodos.
Después de crear una tabla, puede agregar datos mediante comandos INSERT estándar. Tenga en cuenta que, si bien Amazon Redshift funciona con muchos tipos de datos de Iceberg, es posible que necesite convertir algunos formatos de datos al insertar información.
Puede ver las tablas de Iceberg mediante un comando SHOW TABLES. Si desea eliminar una tabla de AWS Glue Data Catalog, puede usar el comando DROP TABLE. Tenga en cuenta que esto solo elimina el registro de la tabla. Los datos reales permanecerán almacenados hasta que los elimine de forma independiente.
Todas las demás instrucciones SQL, como DELETE, UPDATE, MERGE y ALTER TABLE, aún no se admiten en las tablas de Iceberg.
En las secciones siguientes, se muestra la sintaxis SQL para crear, insertar y administrar tablas de Iceberg en Amazon Redshift.
CREATE TABLE
CREATE TABLE [IF NOT EXISTS]<external_schema>.<table_name>( column_name data_type [, ...] ) USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression_value>')]
También puede utilizar la notación de tres partes para buckets de tablas de S3:
CREATE TABLE "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>( column_name data_type [, ...] ) USING ICEBERG [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression_value>')]
Tenga en cuenta que debe tener un nombre de esquema externo existente en el que se creará la tabla externa. Para obtener más información sobre cómo crear y administrar esquemas externos, consulte CREATE EXTERNAL SCHEMA en la documentación de Amazon Redshift.<external_schema>
La cláusula LOCATION define la ubicación de la tabla para esta tabla de Iceberg recién creada. Para las tablas de Amazon S3, LOCATION no se puede especificar, ya que la ubicación de la tabla viene determinada por el catálogo de tablas de Amazon S3 (s3tablescatalog).
En todos los demás casos, LOCATION es obligatorio y debe ser una ubicación vacía, lo que significa que no hay ningún objeto de Amazon S3 existente que comparta este mismo bucket y el mismo prefijo. Tenga en cuenta que la región del bucket de Amazon S3 debe ser la misma que la región del clúster de Amazon Redshift.
Sin embargo, AWS proporciona un método para replicar los datos de las tablas de Iceberg almacenadas en AWS Glue Data Catalog en una Región de AWS en una Región de AWS diferente, lo que permite replicar la escritura en una región diferente. Para obtener más información, consulte Replicar los datos en Regiones de AWS.
PARTITIONED BY define la partición de tablas de Iceberg. Amazon Redshift admite todas las transformaciones de particiones de Iceberg v2, excepto void. Esta es la lista de transformaciones admitidas:
-
identity
-
bucket[N]
-
truncar[W]
-
año
-
mes
-
día
-
hora
Para ver las definiciones completas de estas transformaciones y los tipos de datos compatibles, consulte Transformaciones de partición
PARTITIONED BY admite la partición de varios niveles. Por ejemplo, puede ejecutar el comando siguiente:
CREATE TABLE ... USING ICEBERG LOCATION ... PARTITIONED BY (bucket(16, id), year(ship_date));
Sin embargo, Amazon Redshift no admite el uso de una sola columna en más de una transformación. Por ejemplo, no se admite la siguiente sintaxis:
CREATE TABLE ... USING ICEBERG LOCATION ... PARTITIONED BY (bucket(16, ship_date), year(ship_date));
La cláusula TABLE PROPERTIES define las propiedades de tabla adicionales de esta tabla de Iceberg. La única propiedad de la tabla que admitimos es compression_type que define la compresión predeterminada del archivo de datos de Parquet. Si no se especifica, snappy se utiliza como códec de compresión. Los valores posibles de compression_type son zstd, brotli, gzip, snappy y uncompressed.
nota
CREATE TABLE ... LIKE ... no es compatible con tablas de Iceberg. Las tablas de Iceberg tampoco admiten restricciones ni atributos de columna como sí lo hace la tabla de RMS.
Como alternativa, puede crear y rellenar una tabla de iceberg en una sola operación mediante CREATE TABLE AS SELECT:
CREATE TABLE AS SELECT
CREATE TABLE<external_schema>.<table_name>[( column_name[, ...] )] USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression-value>')] AS SELECT query
También puede utilizar la notación de tres partes para crear tablas en catálogos montados automáticamente:
CREATE TABLE "<catalog_name>".<database_name>.<table_name>[( column_name[, ...] )] USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression-value>')] AS SELECT query
Es similar a la instrucción CREATE TABLE, excepto que CREATE va seguida de una instrucción SELECT para rellenar la tabla con los resultados de la consulta SELECT.
La cláusula CREATE TABLE ya no permite especificar los tipos de datos, ya que los tipos de datos de las columnas los decidirá la consulta SELECT.
Si la consulta SELECT produce un error por algún motivo, esta consulta producirá un error y no se creará la tabla de Iceberg.
Puede ver la estructura de las tablas de Iceberg mediante SHOW
TABLE:
SHOW TABLE
SHOW TABLE<external_schema>.<table_name>
Puede usar también la notación de tres partes con catálogos montados automáticamente:
SHOW TABLE "<catalog_name>".<database_name>.<table_name>
SHOW TABLE muestra la instrucción CREATE TABLE para la tabla de Iceberg. El comando mostrará los resultados adecuados en función del tipo de la tabla. A continuación, se presenta un ejemplo de la salida de SHOW TABLE para la tabla de Iceberg:
CREATE TABLE my_schema.items (id int, price decimal(5, 2)) USING ICEBERG LOCATION 's3://my_s3_bucket/items/' PARTITIONED BY (bucket(16, id)) TABLE PROPERTIES ('compression_type'='snappy')
nota
Para las tablas de Amazon S3, dado que la ubicación de la tabla la administra el catálogo de tablas de Amazon S3, la cláusula LOCATION se omitirá en los resultados de SHOW TABLE.
Después de crear tablas, puede agregar datos mediante INSERT INTO:
INSERT INTO
INSERT INTO<external_schema>.<table_name>[(column_name [, ...])] VALUES (...) INSERT INTO<external_schema>.<table_name>[(column_name [, ...])] (SELECT query) -- Using three-part notation for S3 table buckets: INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>[(column_name [, ...])] VALUES (...) INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>[(column_name [, ...])] (SELECT query)
Puede INSERT INTO la tabla de Iceberg existente mediante la sintaxis anterior. Si se utiliza la cláusula VALUES, se proporcionan los valores de las columnas mostradas por column_name o de todas las columnas si se omite una parte de column_name.
Cuando los datos se insertan en una tabla particionada, las nuevas filas se distribuyen de acuerdo con la especificación de partición predefinida. Si por algún motivo la consulta SELECT produce un error, la consulta producirá un error y no se insertará ningún dato en la tabla de Iceberg.
Es posible que INSERT INTO una tabla de iceberg que no haya creado Amazon Redshift. Sin embargo, hay algunas limitaciones:
-
La tabla debe ser una tabla de Iceberg v2.
-
La tabla debe usar Parquet como formato de datos predeterminado.
-
La tabla no debe tener la compresión de metadatos establecida en True.
-
La tabla no debe habilitar la escritura, auditoría y publicación (WAP).
Para eliminar una tabla de Iceberg del catálogo, utilice el comando DROP TABLE:
DROP TABLE
DROP TABLE<external_schema>.<table_name>
Puede usar también la notación de tres partes con catálogos montados automáticamente:
DROP TABLE "<catalog_name>.<database_name>.<table_name>
La eliminación de una tabla de Iceberg es una operación que se realiza solo con metadatos. Elimina la entrada de la tabla de AWS Glue Data Catalog y del catálogo de tablas de Amazon S3, si se trata de una tabla de Amazon S3. Amazon Redshift no limpia ni elimina ningún archivo de datos o archivos de metadatos existentes en la ubicación de la tabla. Puede utilizar las características en AWS Glue y tablas de Amazon S3 para eliminar los archivos huérfanos. Para AWS Glue, consulte Eliminación de archivos huérfanos. Para ver las tablas de Amazon S3, consulte Mantenimiento de tablas.