

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

# Uso de tablas de Apache Iceberg con Amazon Redshift
<a name="querying-iceberg"></a>

**nota**  
 Para obtener el mejor rendimiento al utilizar tablas de Apache Iceberg con Amazon Redshift, debe generar estadísticas de columnas para las tablas mediante AWS Glue. Para obtener más información, consulte [Generación de estadísticas de las columnas de las tablas de Iceberg](https://docs.aws.amazon.com/glue/latest/dg/iceberg-generate-column-stats.html) en la *Guía para desarrolladores de AWS Glue*. 

En este tema se describe cómo utilizar las tablas en formato de Apache Iceberg con Redshift Spectrum o Redshift sin servidor. Apache Iceberg es un formato de alto rendimiento para tablas de análisis de gran tamaño.

Puede utilizar Redshift Spectrum o Redshift sin servidor para consultar las tablas de Apache Iceberg catalogadas en AWS Glue Data Catalog. Apache Iceberg es un formato de tabla de código abierto para lagos de datos. Para obtener más información, consulte [Apache Iceberg](https://iceberg.apache.org/) en la documentación de Apache Iceberg.

Amazon Redshift proporciona coherencia transaccional para consultar las tablas de Apache Iceberg. Puede manipular los datos de las tablas mediante servicios compatibles con ACID (atomicidad, coherencia, aislamiento y durabilidad) como Amazon Athena y Amazon EMR mientras ejecuta consultas con Amazon Redshift. Amazon Redshift puede utilizar las estadísticas de tabla almacenadas en los metadatos de Apache Iceberg para optimizar los planes de consulta y reducir los escaneos de archivos durante el procesamiento de las consultas. Con Amazon Redshift SQL, puede unir tablas de Redshift con tablas de lago de datos.

Para empezar a utilizar las tablas de Iceberg con Amazon Redshift:

1. Cree una tabla de Apache Iceberg en una base de datos de AWS Glue Data Catalog mediante un servicio compatible como Amazon Athena o Amazon EMR. Para crear una tabla de Iceberg mediante Athena, consulte [Uso de las tablas de Apache Iceberg](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html) en la *Guía del usuario de Amazon Athena*.

1. Cree un clúster de Amazon Redshift o un grupo de trabajo de Redshift sin servidor con un rol de IAM asociado que permita el acceso a su lago de datos. Para obtener información sobre cómo crear clústeres o grupos de trabajo, consulte [Introducción a los almacenamientos de datos de Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/new-user.html) e [Introducción a almacenamientos de datos de Redshift sin servidor](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html) en la *Guía de introducción de Amazon Redshift*.

1. Conéctese a su clúster o grupo de trabajo mediante el editor de consultas v2 o un cliente SQL de terceros. Para obtener información sobre cómo conectarse mediante el editor de consultas v2, consulte [Conexión a un almacenamiento de datos de Amazon Redshift con herramientas de cliente de SQL](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-to-cluster.html) en la *Guía de administración de Amazon Redshift*.

1. Cree un esquema externo en la base de datos de Amazon Redshift para una base de datos de catálogo de datos específica que incluya las tablas de Iceberg. Para obtener información sobre la creación de un esquema externo, consulte [Esquemas externos en Amazon Redshift Spectrum](c-spectrum-external-schemas.md).

1. Utilice las consultas SQL para acceder a las tablas Iceberg del esquema externo que ha creado.

## Consideraciones al utilizar tablas de Apache Iceberg con Amazon Redshift
<a name="querying-iceberg-considerations"></a>

Tenga en cuenta lo siguiente cuando utilice Amazon Redshift con tablas de Iceberg:
+ **Compatibilidad con la versión de Iceberg**: Amazon Redshift admite la ejecución de consultas en las siguientes versiones de tablas de Iceberg:
  + Versión 1, que define cómo se administran las tablas analíticas de gran tamaño mediante archivos de datos inmutables.
  + Versión 2, que agrega la capacidad de admitir la actualización y eliminación en el nivel de fila sin modificar los archivos de datos existentes y el control de los cambios en los datos de la tabla mediante archivos de eliminación. 

   Para ver la diferencia entre las tablas de la versión 1 y la versión 2, consulte [Format version changes](https://iceberg.apache.org/spec/#appendix-e-format-version-changes) en la documentación de Apache Iceberg.
+ **Adición de particiones**: no es necesario que agregue manualmente particiones para sus tablas de Apache Iceberg. Amazon Redshift detecta automáticamente las nuevas particiones en las tablas de Apache Iceberg y no es necesaria ninguna operación manual para actualizar las particiones en la definición de tabla. Cualquier cambio en la especificación de las particiones también se aplica automáticamente a las consultas sin intervención del usuario.
+ **Ingesta de datos de Iceberg en Amazon Redshift**: puede utilizar los comandos INSERT INTO o CREATE TABLE AS para importar datos de su tabla de Iceberg en una tabla local de Amazon Redshift. Actualmente no puede utilizar el comando COPY para ingerir el contenido de una tabla de Apache Iceberg en una tabla local de Amazon Redshift.
+ **Vistas materializadas**: puede crear vistas materializadas en las tablas de Apache Iceberg como en cualquier otra tabla externa de Amazon Redshift. Se aplican a las tablas de Apache Iceberg las mismas consideraciones para otros formatos de tablas de lago de datos. Actualmente no se admiten la reescritura automática de consultas ni las vistas materializadas automáticas en las tablas del lago de datos.
+ **Control de acceso detallado de AWS Lake Formation** Amazon Redshift admite el control de acceso detallado en las tablas de AWS Lake Formation.
+ **Parámetros de control de datos definidos por el usuario**: Amazon Redshift admite parámetros de control de datos definidos por el usuario en tablas de Apache Iceberg. Utiliza parámetros de tratamiento de datos definidos por el usuario en los archivos existentes para adaptar los datos que se consultan en las tablas externas y evitar errores de análisis. Estos parámetros proporcionan capacidades para controlar las discordancias entre el esquema de la tabla y los datos reales de los archivos. También puede utilizar parámetros de control de datos definidos por el usuario en las tablas de Apache Iceberg.
+ **Consultas de viajes en el tiempo**: las consultas de viajes en el tiempo no son compatibles actualmente con las tablas de Apache Iceberg.
+ **Precios**: cuando acceda a las tablas de Iceberg desde un clúster, se le cobrarán los precios de Redshift Spectrum. Cuando acceda a las tablas de Iceberg desde un grupo de trabajo, se le aplicarán los precios de Redshift sin servidor. Para obtener información sobre los precios de Redshift Spectrum y Redshift sin servidor, consulte [Precios de Amazon Redshift](https://aws.amazon.com/redshift/pricing/).
+ **Almacenamiento en caché de metadatos**: el almacenamiento en caché de metadatos supone que los archivos de metadatos son inmutables en función de la [especificación de Iceberg](https://iceberg.apache.org/spec/#file-system-operations). La inmutabilidad de los archivos de metadatos es un requisito para la integridad de los datos en Amazon Redshift.
+ **Identidad federada**: no se admite la identidad federada cuando se escribe en tablas de Apache Iceberg. Esto incluye el uso de la palabra clave SESSION para el parámetro IAM\$1ROLE al crear esquemas externos. Para obtener más información sobre los parámetros IAM\$1ROLE, consulte [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

# Tipos de datos compatibles con las tablas de Apache Iceberg
<a name="querying-iceberg-supported-data-types"></a>

En este tema se describen los tipos de datos compatibles que Redshift Spectrum puede leer de tablas en formato de Apache Iceberg.

Amazon Redshift puede consultar las tablas de Iceberg que contienen los siguientes tipos de datos:

```
binary
boolean
date
decimal
double
float
int
list
long
map
string
struct
timestamp without time zone
```

Al crear y definir una tabla de Iceberg, utilice los nombres de los tipos de datos de Amazon Redshift en la instrucción SQL. Redshift los asigna automáticamente a los tipos de iceberg correspondientes. Para obtener más información sobre los tipos de datos de Iceberg, consulte los [esquemas para Iceberg](https://iceberg.apache.org/docs/latest/schemas/) en la documentación de Apache.

Al leer tablas de Iceberg, los tipos de datos de Iceberg se asignan a tipos de datos de Redshift, como se muestra en la siguiente tabla: 


****  

| Tipo Iceberg | Tipo de Amazon Redshift | Notas | 
| --- | --- | --- | 
| boolean | boolean | - | 
| - | tinyint | No es compatible con las tablas de Iceberg. | 
| - | smallint | No es compatible con las tablas de Iceberg. | 
| int | int | - | 
| long | bigint | - | 
| double | double precision | - | 
| float | real | - | 
| decimal(P, S) | decimal(P, S) | P es la precisión, S es la escala. | 
| - | char | No es compatible con las tablas de Iceberg. | 
| string | varchar(16384) | Cadenas más grandes que 16384 están truncadas en 16384. | 
| binary | varbyte(64000) | - | 
| date | date | - | 
| time | - | - | 
| timestamp | timestamp | - | 
| timestamptz | timestampz | - | 
| list<E> | SUPER | - | 
| map<K,V> | SUPER | - | 
| struct<...> | SUPER | - | 
| fixed(L) | - | El tipo fixed(L) no se admite actualmente en Redshift Spectrum. | 
| uuid | - | El tipo uuid no se admite actualmente en Redshift Spectrum. | 
| variant | - | Amazon Redshift no admite Iceberg V3. | 
| geometry | - | Amazon Redshift no admite Iceberg V3. | 
| geography | - | Amazon Redshift no admite Iceberg V3. | 
| timestamp\$1ns | - | Amazon Redshift no admite Iceberg V3. | 
| timestamptz\$1ns | - | Amazon Redshift no admite Iceberg V3. | 
| Unknown | - | Amazon Redshift no admite Iceberg V3. | 

Se admiten los siguientes tipos de datos al crear tablas de Iceberg desde Redshift. Los tipos de datos de Redshift se asignan a los tipos de datos de Iceberg, como se muestra en la siguiente tabla. 


****  

| Tipo de Amazon Redshift | Alias de Amazon Redshift | Tipo Iceberg | Notas | 
| --- | --- | --- | --- | 
| integer | int, int4 | int | - | 
| bigint | int8 | long | - | 
| decimal | numeric | decimal(p,S) | - | 
| real | float4 | float | - | 
| double precision | float8, float | double | - | 
| varchar | charactter varying,nvarchar, text | string | El tipo de datos varchar(n) no se admite al crear una tabla de iceberg. | 
| date | - | date | - | 
| timestamp | - | timestamp | - | 
| timestamptz | - | timestamptz | - | 
| boolean | - | boolean | - | 

Al escribir en tablas de iceberg, además de los tipos de datos mencionados en la tabla anterior, algunos tipos de datos de origen se convierten en tipos de Iceberg compatibles, como se muestra en la tabla siguiente.


| Tipo de Amazon Redshift | Tipo Iceberg | 
| --- | --- | 
|  `tinyint`  |  `int`  | 
|  `smallint`  |  `int`  | 
|  `varchar(n)`  |  `string`  | 

Si intenta utilizar tipos de datos que no son compatibles, se producirán errores de sintaxis. Al crear una tabla de Iceberg con una cláusula `CREATE TABLE AS SELECT`, puede agregar una conversión explícita para evitar la diferencia de tipos.

Por ejemplo, suponga que tiene una tabla de Redshift RMS con el siguiente esquema:

```
CREATE TABLE rms_t (c1 int, c2 char(20));
```

Si quiere crear una tabla de Iceberg mediante `rms_t` como origen, necesita una conversión explícita para la columna `c2`, ya que el tipo `varchar(n)` no es compatible:

```
CREATE TABLE ext_schema.iceberg_t AS SELECT c1, c2::varchar FROM rms_t;
```

Para obtener más información sobre los tipos de datos en Amazon Redshift, consulte [Tipos de datos](c_Supported_data_types.md).

# Tablas de Iceberg de referencia en Amazon Redshift
<a name="referencing-iceberg-tables"></a>

Amazon Redshift ofrece varias formas de hacer referencia a las tablas de Apache Iceberg almacenadas en el lago de datos. Puede usar esquemas externos para crear referencias a las bases de datos del catálogo de datos que contienen tablas de Iceberg o usar una notación de tres partes para acceder directamente a los catálogos montados automáticamente.

## Uso de esquemas externos para hacer referencia a las tablas de Iceberg
<a name="referencing-iceberg-external-schemas"></a>

Los esquemas externos proporcionan una forma de hacer referencia a las tablas del catálogo de datos desde Amazon Redshift. Cuando crea un esquema externo, establece una conexión entre la base de datos de Amazon Redshift y una base de datos de catálogo de datos específica que incluye las tablas de Iceberg.

Para crear un esquema externo para las tablas de Iceberg:

```
CREATE EXTERNAL SCHEMA schema_name
FROM DATA CATALOG
DATABASE 'glue_database_name'
IAM_ROLE 'arn:aws:iam::account-id:role/role-name';
```

Tras crear el esquema externo, puede consultar las tablas de Iceberg mediante una notación de dos partes:

```
SELECT * FROM schema_name.iceberg_table_name;
```

También puede unir tablas de Iceberg con tablas locales de Amazon Redshift:

```
SELECT r.customer_id, i.order_date, r.customer_name
FROM local_customers r
JOIN schema_name.iceberg_orders i 
ON r.customer_id = i.customer_id;
```

## Uso de la notación de tres partes con catálogos montados automáticamente
<a name="referencing-iceberg-three-part-notation"></a>

La notación de tres partes permite hacer referencia directa a las tablas de los catálogos montados automáticamente sin crear esquemas externos. Esto resulta particularmente útil cuando se trabaja con buckets de tablas de Amazon S3 federados con AWS Lake Formation. Para obtener información sobre cómo configurar el montaje automático del catálogo de datos, consulte [Simplificación del acceso a objetos externos en Amazon Redshift mediante el montaje automático de AWS Glue Data Catalog](https://aws.amazon.com/blogs/big-data/simplify-external-object-access-in-amazon-redshift-using-automatic-mounting-of-the-aws-glue-data-catalog/).

La sintaxis de la notación de tres partes es:

```
"catalog_name".database_name.table_name
```

Por ejemplo, para consultar una tabla de Iceberg en un catálogo de tablas de Amazon S3 montado automáticamente:

```
SELECT * FROM "my_table_bucket@s3tablescatalog".my_database.my_iceberg_table;
```

Para obtener más información sobre la integración de buckets de tablas de Amazon S3 con Amazon Redshift, consulte [Acceso a las tablas de Amazon S3 con Amazon Redshift](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-redshift.html) en la *Guía del usuario de Amazon S3*.

También puede usar la instrucción `USE` para establecer un catálogo y una base de datos predeterminados:

```
USE "my_table_bucket@s3tablescatalog".my_database;
SELECT * FROM my_iceberg_table;
```

Para establecer una ruta de búsqueda para la resolución del esquema:

```
USE "my_table_bucket@s3tablescatalog";
SET search_path TO my_database;
SELECT * FROM my_iceberg_table;
```

## Prácticas recomendadas para hacer referencia a tablas de Iceberg
<a name="referencing-iceberg-best-practices"></a>

Tenga en cuenta las siguientes prácticas recomendadas al hacer referencia a tablas de Iceberg en Amazon Redshift:
+ **Use nombres de esquema descriptivos**: al crear esquemas externos, use nombres que indiquen claramente el origen y el propósito de los datos, como `sales_data_lake` o `customer_analytics`.
+ **Aproveche las estadísticas de las tablas**: asegúrese de que las estadísticas de las columnas se generen para las tablas de Iceberg que utilicen AWS Glue para optimizar el rendimiento de las consultas. Amazon Redshift utiliza estas estadísticas para planificar y optimizar las consultas.
+ **Tenga en cuenta la actualización de los datos**: otros servicios pueden actualizar las tablas de Iceberg mientras las consulta. Amazon Redshift proporciona coherencia transaccional, lo que garantiza que vea una instantánea coherente de los datos durante la ejecución de la consulta.
+ **Utilice los permisos de IAM adecuados**: asegúrese de que el clúster o grupo de trabajo de Amazon Redshift tenga los permisos de IAM necesarios para acceder a las ubicaciones de Amazon S3 en las que se almacenan las tablas de Iceberg, así como a los metadatos del catálogo de datos.
+ **Supervise el rendimiento de las consultas**: utilice las características de supervisión de consultas de Amazon Redshift para realizar un seguimiento del rendimiento de las consultas en comparación con las tablas de Iceberg y optimícelas según sea necesario.

## Patrones de referencia comunes
<a name="referencing-iceberg-examples"></a>

En los siguientes ejemplos, se muestran patrones comunes para hacer referencia a las tablas de Iceberg:

**Adición de datos en varias tablas de Iceberg:**

```
SELECT 
    region,
    SUM(sales_amount) as total_sales,
    COUNT(*) as transaction_count
FROM data_lake.sales_transactions
WHERE transaction_date >= '2024-01-01'
GROUP BY region
ORDER BY total_sales DESC;
```

**Unión de tablas de Iceberg con tablas locales de Amazon Redshift:**

```
SELECT 
    c.customer_name,
    c.customer_tier,
    SUM(o.order_amount) as total_orders
FROM customers c
JOIN data_lake.order_history o ON c.customer_id = o.customer_id
WHERE o.order_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY c.customer_name, c.customer_tier;
```

**Uso de una notación de tres partes con consultas complejas:**

```
WITH recent_orders AS (
    SELECT customer_id, order_date, order_amount
    FROM "analytics_bucket@s3tablescatalog".ecommerce.orders
    WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
)
SELECT 
    customer_id,
    COUNT(*) as order_count,
    AVG(order_amount) as avg_order_value
FROM recent_orders
GROUP BY customer_id
HAVING COUNT(*) > 1;
```

# Escritura en tablas de Apache Iceberg
<a name="iceberg-writes"></a>

Con Amazon Redshift, puede crear y escribir en tablas de Apache Iceberg almacenadas en Amazon S3 y en buckets de tablas de Amazon S3. La escritura de datos de Iceberg directamente desde Amazon Redshift optimiza la administración de datos al eliminar herramientas adicionales. Las tablas de Iceberg se deben registrar con AWS Glue Data Catalog. 

Puede utilizar la arquitectura de lago de datos con tablas de Apache Iceberg y, al mismo tiempo, aprovechar los potentes análisis SQL de Amazon Redshift en almacenes y en lagos. También obtiene acceso inmediato a las características avanzadas de Amazon Redshift, como las vistas materializadas de las tablas de Iceberg, lo que mejora considerablemente las capacidades de análisis sin agregar complejidad.

Las escrituras de Iceberg son compatibles con los clústeres aprovisionados de Amazon Redshift y las instancias de Amazon Redshift sin servidor.

**Topics**
+ [Comandos SQL](iceberg-writes-sql-syntax.md)
+ [Semántica de transacciones](iceberg-writes-transaction-semantics.md)
+ [Prácticas recomendadas](iceberg-writes-best-practices.md)

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

# Semántica de transacciones
<a name="iceberg-writes-transaction-semantics"></a>

Las consultas de escritura de Redshift Iceberg admiten ACID y el aislamiento de instantáneas. Las transacciones de escritura tienen una atomicidad garantizada y no producen actualizaciones parciales cuando una consulta produce un error de forma inesperada. 

Se pueden ejecutar varias transacciones de Iceberg al mismo tiempo y, si dos transacciones intentan modificar la misma tabla o partición al mismo tiempo, se produce un error en la confirmación de la transacción. Esto garantiza la integridad de los datos. Cuando esto ocurre, debe resolver los conflictos manualmente y volver a ejecutar las consultas erróneas. Amazon Redshift no vuelve a intentar resolver los conflictos automáticamente.

Una sola consulta de escritura de Iceberg siempre se trata como una única transacción de confirmación automática. Cuando una consulta de escritura de Iceberg, como una consulta CREATE o INSERT, se incluye en un bloque de transacciones explícito, no se pueden ejecutar otras consultas dentro del mismo bloque de transacciones. La transacción producirá un error.

A continuación, se muestran algunos ejemplos: El primer ejemplo demuestra que la consulta de una sola instrucción siempre se confirma automáticamente una vez finalizada la consulta. En este escenario, crea una nueva tabla de pedidos de ventas:

```
CREATE TABLE sales_schema.orders (
    order_id int, 
    customer_id int, 
    order_date date, 
    total_amount decimal(10,2)
) USING ICEBERG LOCATION 's3://my-data-lake/sales/orders/';
```

Este ejemplo es un bloque de transacciones explícito para insertar un pedido de un cliente mediante notación de tres partes para un bucket de tabla de S3. La transacción no se confirma automáticamente después de la consulta INSERT, sino que confirma e inserta los datos del pedido con el comando COMMIT:

```
BEGIN;
INSERT INTO "analytics_bucket@s3tablescatalog".sales_db.orders VALUES (12345, 9876, '2024-10-30', 299.99);
COMMIT;
```

Este ejemplo es un escenario de reversión explícita de un bloque de transacciones en el que está probando la inserción de un pedido pero decide cancelarlo. La transacción no se confirma automáticamente después de la consulta INSERT, sino que se revierte con el comando ROLLBACK sin insertar la orden de prueba.

```
BEGIN;
INSERT INTO sales_schema.orders VALUES (12346, 5432, '2024-10-30', 150.75);
ROLLBACK;
```

Este último ejemplo demuestra cómo, cuando se intenta ejecutar otra instrucción dentro del mismo bloque de transacciones que la consulta INSERT, la transacción produce un error sin insertar los datos del pedido. En este escenario, está intentando insertar un pedido e inmediatamente consultar la tabla: 

```
BEGIN;
INSERT INTO sales_schema.orders VALUES (12347, 7890, '2024-10-30', 425.50);
SELECT * FROM sales_schema.orders WHERE order_id = 12347;
```

La única excepción a esto es la instrucción `DROP TABLE`, que siempre se comporta como una instrucción de confirmación automática y no se puede ejecutar dentro de un bloque de transacciones explícito. Esto es para mantener el mismo comportamiento que `DROP TABLE` en una tabla externa. Para obtener más información, consulte [DROP TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_TABLE.html).

**nota**  
Los SQL de escritura de Iceberg no se pueden ejecutar desde un procedimiento almacenado. 

# Prácticas recomendadas
<a name="iceberg-writes-best-practices"></a>

Tenga en cuenta las siguientes prácticas recomendadas al escribir en una tabla de Apache Iceberg:
+ Para cargas de trabajo de escritura o streaming pequeñas y frecuentes, considere la posibilidad de utilizar las características de compactación proporcionadas por AWS Glue Data Catalog o las tablas de Amazon S3 para optimizar el tamaño de los archivos para las lecturas.
+ El comando `DROP TABLE` anula el registro de la tabla de AWS Glue Data Catalog o el catálogo de tablas de Amazon S3, pero los archivos se conservan. 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).