

# Trabajo con Apache Iceberg V3
<a name="working-with-apache-iceberg-v3"></a>

La versión 3 (V3) de Apache Iceberg es la última versión de la especificación de formato de tablas de Apache Iceberg e incorpora funciones avanzadas para crear lagos de datos a escala de petabytes con un rendimiento mejorado y una sobrecarga operativa reducida. V3 aborda los cuellos de botella de rendimiento más comunes que se presentan con V2, especialmente en lo que respecta a las actualizaciones por lotes y las eliminaciones por cumplimiento de normas.

AWS proporciona compatibilidad con los vectores de eliminación y el linaje de filas, tal como se define en la especificación de la versión 3 (V3) de Apache Iceberg. Estas características están disponibles con Apache Spark en [Amazon EMR 7.12](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-emr.html), [AWS Glue ETL](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-glue.html), [Blocs de notas de Estudio unificado de Amazon SageMaker](https://docs.aws.amazon.com/next-generation-sagemaker/) y tablas de Apache Iceberg en el [Catálogo de datos de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html), incluidas las [Tablas de Amazon S3](https://aws.amazon.com/s3/features/tables/).

## Características clave en V3
<a name="key-features-v3"></a>

Vectores de eliminación  
Sustituye los archivos de eliminación posicional de V2 por un formato binario eficiente almacenado como archivos Puffin. De este modo, se elimina la amplificación de escritura que se produce al realizar actualizaciones aleatorias por lotes y las eliminaciones en cumplimiento del RGPD, lo que reduce considerablemente la sobrecarga que supone mantener los datos actualizados. Las organizaciones que procesen actualizaciones de alta frecuencia experimentarán mejoras inmediatas en el rendimiento de escritura y una reducción de los costos de almacenamiento gracias a una menor cantidad de archivos pequeños.

Linaje de filas  
Permite un seguimiento preciso de los cambios por fila. Los sistemas posteriores pueden procesar los cambios de forma gradual, lo que acelera las canalizaciones de datos y reduce los costos informáticos de los flujos de trabajo de captura de datos sobre cambios (CDC). Esta función integrada elimina la necesidad de implementaciones de seguimiento de cambios personalizadas.

## Compatibilidad de versiones
<a name="version-compatibility"></a>

V3 mantiene la compatibilidad con versiones anteriores de las tablas de V2. Los servicios de AWS admiten tablas V2 y V3 simultáneamente, lo que permite:
+ Ejecutar consultas en las tablas V2 y V3
+ Actualizar las tablas V2 existentes a V3 sin tener que volver a escribir los datos
+ Ejecutar consultas sobre viajes en el tiempo que abarquen instantáneas de V2 y V3
+ Utilizar la evolución del esquema y la partición oculta en todas las versiones de la tabla

**importante**  
V3 es una actualización unidireccional. Una vez que una tabla se actualiza de V2 a V3, no se puede volver a bajar la categoría a V2 mediante las operaciones estándar.

## Introducción a V3
<a name="getting-started-v3"></a>

### Requisitos previos
<a name="prerequisites"></a>

Antes de trabajar con las tablas de V3, asegúrese de que dispone de:
+ Una cuenta de AWS con los permisos de IAM adecuados
+ Acceso a uno o más servicios de análisis de AWS (EMR, Glue, blocs de notas de Estudio unificado de Amazon SageMaker o tablas de S3)
+ Un bucket de S3 para almacenar datos y metadatos de tablas
+ Un bucket de tabla para empezar con tablas de S3 o un bucket de S3 de uso general si está creando su propia infraestructura de Iceberg
+ Se ha configurado el catálogo de AWS Glue

### Creación de tablas de V3
<a name="creating-v3-tables"></a>

#### Creación de tablas de V3 nuevas
<a name="creating-new-v3-tables"></a>

Para crear una nueva tabla de Iceberg V3, establezca la propiedad de la tabla de versión de formato en 3.

**Con Spark SQL:**

```
CREATE TABLE IF NOT EXISTS myns.orders_v3 (  
    order_id bigint,  
    customer_id string,  
    order_date date,  
    total_amount decimal(10,2),  
    status string,  
    created_at timestamp  
)  
USING iceberg  
TBLPROPERTIES (  
    'format-version' = '3'  
)
```

#### Actualización de las tablas de V2 a V3
<a name="upgrading-v2-to-v3"></a>

Puede actualizar las tablas de V2 existentes a V3 sin tener que volver a escribir los datos.

**Con Spark SQL:**

```
ALTER TABLE myns.existing_table  
SET TBLPROPERTIES ('format-version' = '3')
```

**importante**  
V3 es una actualización unidireccional. Una vez que una tabla se actualiza de V2 a V3, no se puede volver a bajar la categoría a V2 mediante las operaciones estándar.

**Qué sucede durante la actualización:**
+ Se crea una nueva instantánea de metadatos de forma atómica
+ Los archivos de datos de Parquet existentes se reutilizan
+ Los campos de linaje de filas se agregan a los metadatos de la tabla
+ La siguiente compactación eliminará los archivos de eliminación V2 antiguos
+ Las nuevas modificaciones utilizarán los archivos vectoriales de eliminación V3
+ La actualización no rellena históricamente los registros de seguimiento de los cambios de linaje de las filas

### Habilitación de vectores de eliminación
<a name="enabling-deletion-vectors"></a>

Para aprovechar los vectores de eliminación para actualizar, eliminar y fusionar, configure el modo de escritura.

**Con Spark SQL:**

```
ALTER TABLE myns.orders_v3  
SET TBLPROPERTIES ('format-version' = '3',  
                   'write.delete.mode' = 'merge-on-read',  
                   'write.update.mode' = 'merge-on-read',  
                   'write.merge.mode' = 'merge-on-read'  
                  )
```

Esta configuración garantiza que las operaciones de actualización, eliminación y fusión creen archivos vectoriales de eliminación en lugar de reescribir archivos de datos completos.

### Aprovechamiento del linaje de filas para el seguimiento de los cambios
<a name="leveraging-row-lineage"></a>

V3 agrega automáticamente campos de metadatos de linaje de filas para realizar un seguimiento de los cambios.

**Con Spark SQL:**

```
# Query with parameter value provided  
last_processed_sequence = 47  
  
SELECT   
    id,  
    data,  
    _row_id,  
    _last_updated_sequence_number  
FROM myns.orders_v3  
WHERE _last_updated_sequence_number > :last_processed_sequence
```

El campo \$1row\$1id identifica de forma única cada fila, mientras que \$1last\$1updated\$1sequence\$1number registra cuándo se modificó la fila por última vez. Utilice estos campos para:
+ Identificar las filas modificadas para su procesamiento incremental
+ Realizar un seguimiento del linaje de datos para comprobar el cumplimiento
+ Optimización de las canalizaciones de CDC
+ Reducción de los costos informáticos procesando solo los cambios

## Prácticas recomendadas para V3
<a name="best-practices-v3"></a>

### Cuándo se debe usar V3
<a name="when-to-use-v3"></a>

Considere la posibilidad de actualizar a V3 o comenzar con ella cuando:
+ Realiza actualizaciones o eliminaciones por lotes con frecuencia
+ Debe cumplir con el GDPR o con los requisitos de cumplimiento de eliminación
+ Las cargas de trabajo implican interrupciones de alta frecuencia
+ Necesita flujos de trabajo de CDC eficientes
+ Desea reducir los costos de almacenamiento de los archivos pequeños
+ Necesita mejores capacidades de seguimiento de cambios

### Optimización del rendimiento de escritura
<a name="optimizing-write-performance"></a>
+ Habilite los vectores de eliminación para cargas de trabajo que requieren muchas actualizaciones:

  ```
  SET TBLPROPERTIES (  
  'write.delete.mode' = 'merge-on-read',  
  'write.update.mode' = 'merge-on-read',  
  'write.merge.mode' = 'merge-on-read'  
  )
  ```
+ Configure los tamaños de archivo adecuados:

  ```
  SET TBLPROPERTIES (  
  'write.target-file-size-bytes' = '536870912'  — 512 MB  
  )
  ```

### Optimización del rendimiento de lectura
<a name="optimizing-read-performance"></a>
+ Aproveche el linaje de filas para el procesamiento incremental
+ Utilice los viajes temporales para acceder a los datos históricos sin necesidad de copiarlos
+ Habilite la recopilación de estadísticas para una mejor planificación de las consultas

## Estrategia de migración
<a name="migration-strategy"></a>

Cuando se migra de V2 a V3:
+ Realice primero las pruebas fuera de producción: valide el proceso de actualización y el rendimiento
+ Actualice durante los periodos de baja actividad: minimice el impacto en las operaciones simultáneas
+ Supervise el rendimiento inicial: realice un seguimiento de las métricas después de la actualización
+ Ejecute la compactación: consolide los archivos de eliminación después de la actualización
+ Actualización de la documentación: refleje las características de V3 en la documentación del equipo

## Consideraciones sobre compatibilidad
<a name="compatibility-considerations"></a>
+ Versiones del motor: asegúrese de que todos los motores que acceden a la tabla sean compatibles con V3
+ Herramientas de terceros: compruebe la compatibilidad con la V3 antes de realizar la actualización
+ Estrategia de copia de seguridad: pruebe los procedimientos de recuperación basados en instantáneas
+ Supervisión: actualice los paneles de supervisión para las métricas específicas de V3

## Solución de problemas
<a name="troubleshooting"></a>

### Problemas comunes
<a name="common-issues"></a>

Error: “No se admite el formato de la versión 3”  
+ Compruebe que la versión del motor sea compatible con V3

  La compatibilidad de V3 para los servicios de AWS de Amazon es el siguiente:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/working-with-apache-iceberg-v3.html)
+ Comprobación de la compatibilidad del catálogo
+ Garantice las versiones del servicio de AWS más recientes

Degradación del rendimiento tras la actualización  
+ Compruebe que no haya errores de compactación. Consulte [Registro y supervisión de tablas de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-monitoring-overview.html) para obtener más información.
+ Compruebe si los vectores de eliminación están habilitados. Asegúrese de que se establecen las siguientes propiedades:

  ```
  SET TBLPROPERTIES (  
  'write.delete.mode' = 'merge-on-read',  
  'write.update.mode' = 'merge-on-read',  
  'write.merge.mode' = 'merge-on-read'  
  )
  ```
+ Puede verificar las propiedades de la tabla con el siguiente código:

  ```
  DESCRIBE FORMATTED myns.orders_v3
  ```
+ Revise la estrategia de partición. El exceso de particiones puede provocar archivos pequeños. Ejecute la siguiente consulta para obtener el tamaño medio de archivo de la tabla:

  ```
  SELECT avg(file_size_in_bytes) as avg_file_size_bytes   
  FROM myns.orders_v3.files
  ```

Incompatibilidad con herramientas de terceros  
+ Verifique que la herramienta sea compatible con la especificación de V3
+ Consideración de la posibilidad de mantener las tablas de V2 para las herramientas no compatibles
+ Contacte con el proveedor de la herramienta para obtener información sobre el calendario de asistencia de V3

### Obtener ayuda
<a name="getting-help"></a>
+ Asistencia de AWS: contacte con el servicio de asistencia de AWS para problemas específicos del servicio
+ Comunidad de Apache Iceberg: Iceberg Slack
+ Documentación de AWS: documentación de análisis de AWS

## Precios
<a name="pricing"></a>
+ Amazon EMR: [Precios informáticos y almacenamiento](https://aws.amazon.com/emr/pricing/)
+ [Precios de Amazon SageMaker](https://aws.amazon.com/sagemaker/pricing/)
+ AWS Glue: [precios de ejecución de trabajo y catálogo de datos](https://aws.amazon.com/glue/pricing/)
+ Tablas de S3: [precios de almacenamiento y solicitud](https://aws.amazon.com/s3/pricing/)

## Disponibilidad
<a name="availability"></a>

La compatibilidad con Apache Iceberg V3 está disponible en todas las regiones de AWS en las que operan Amazon EMR, el catálogo de datos de AWS Glue, AWS Glue ETL y tablas de S3.

## Recursos adicionales
<a name="additional-resources"></a>
+ [Documentación de Apache Iceberg V3](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/introduction.html)
+ [Prácticas recomendadas de migración](https://aws.amazon.com/solutions/guidance/migrating-tabular-data-from-amazon-s3-to-s3-tables/)
+ [Guía de introducción](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-getting-started.html)