

 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/). 

# Comandos SQL
<a name="iceberg-writes-sql-syntax"></a>

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.

**Contents**
+ [CREATE TABLE](#iceberg-writes-create-table)
+ [CREATE TABLE AS SELECT](#iceberg-writes-create-table-as-select)
+ [SHOW TABLE](#iceberg-writes-show-table)
+ [INSERT INTO](#iceberg-writes-insert-into)
+ [DROP TABLE](#iceberg-writes-drop-table)

## CREATE TABLE
<a name="iceberg-writes-create-table"></a>

```
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 `<external_schema>` 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](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) en la documentación de Amazon Redshift.

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](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/best-practices-workloads.html#workloads-replication).

`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 [Partition Transforms](https://iceberg.apache.org/spec/#partition-transforms) en la documentación de Apache Iceberg.

`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
<a name="iceberg-writes-create-table-as-select"></a>

```
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
<a name="iceberg-writes-show-table"></a>

```
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
<a name="iceberg-writes-insert-into"></a>

```
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
<a name="iceberg-writes-drop-table"></a>

```
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](https://docs.aws.amazon.com/glue/latest/dg/orphan-file-deletion.html). Para ver las tablas de Amazon S3, consulte [Mantenimiento de tablas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html).