Optimizar el almacenamiento - AWS Guía prescriptiva

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Optimizar el almacenamiento

Al actualizar o eliminar los datos de una tabla Iceberg, se aumenta el número de copias de los datos, como se muestra en el siguiente diagrama. Lo mismo ocurre con la compactación en ejecución: aumenta el número de copias de datos en Amazon S3. Esto se debe a que Iceberg trata los archivos subyacentes a todas las tablas como inmutables.

Resultados de la actualización o eliminación de datos en una tabla de Iceberg

Siga las prácticas recomendadas de esta sección para gestionar los costes de almacenamiento.

Habilite S3 Intelligent-Tiering

Utilice la clase de almacenamiento Amazon S3 Intelligent-Tiering para mover automáticamente los datos al nivel de acceso más rentable cuando cambien los patrones de acceso. Esta opción no supone una sobrecarga operativa ni afecta al rendimiento.  

Nota: No utilice los niveles opcionales (como Archive Access y Deep Archive Access) de S3 Intelligent-Tiering with Iceberg tables. Para archivar datos, consulte las directrices de la siguiente sección.

También puede usar las reglas del ciclo de vida de Amazon S3 para establecer sus propias reglas para mover objetos a otra clase de almacenamiento de Amazon S3, como S3 Standard-IA o S3 One Zone-IA (consulte Transiciones compatibles y restricciones relacionadas en la documentación de Amazon S3).

Archive o elimine las instantáneas históricas

Por cada transacción confirmada (inserción, actualización, combinación, compactación) en una tabla de Iceberg, se crea una nueva versión o instantánea de la tabla. Con el tiempo, el número de versiones y el número de archivos de metadatos de Amazon S3 se acumulan.

Es necesario conservar las instantáneas de una tabla para funciones como el aislamiento de las instantáneas, la reversión de tablas y las consultas sobre viajes en el tiempo. Sin embargo, los costes de almacenamiento aumentan con la cantidad de versiones que se conservan.

En la siguiente tabla se describen los patrones de diseño que puede implementar para administrar los costos en función de sus requisitos de retención de datos.

Patrón de diseño

Solución

Casos de uso

Eliminar instantáneas antiguas

  • Utilice la sentencia VACUUM de Athena para eliminar las instantáneas antiguas. Esta operación no implica ningún coste informático.

Este enfoque elimina las instantáneas que ya no se necesitan para reducir los costos de almacenamiento. Puede configurar cuántas instantáneas deben conservarse o durante cuánto tiempo, en función de sus requisitos de retención de datos.

Esta opción realiza una eliminación definitiva de las instantáneas. No puede revertir ni viajar en el tiempo a instantáneas caducadas.

Establezca políticas de retención para instantáneas específicas

  1. Utilice etiquetas para marcar instantáneas específicas y definir una política de retención en Iceberg. Para obtener más información, consulte las etiquetas históricas en la documentación de Iceberg.

    Por ejemplo, puedes conservar una instantánea al mes durante un año mediante la siguiente sentencia SQL en Spark on Amazon EMR:

    ALTER TABLE glue_catalog.db.table CREATE TAG 'EOM-01' AS OF VERSION 30 RETAIN 365 DAYS
  2. Usa Spark en Amazon EMR o AWS Glue para eliminar las instantáneas intermedias restantes sin etiquetar.

Este patrón es útil para cumplir con los requisitos empresariales o legales que requieren que muestres el estado de una tabla en un momento dado del pasado. Al colocar políticas de retención en instantáneas etiquetadas específicas, puede eliminar otras instantáneas (sin etiquetar) que se hayan creado. De esta forma, puede cumplir con los requisitos de retención de datos sin conservar todas las instantáneas creadas.

Archive las instantáneas antiguas

  1. Usa las etiquetas de Amazon S3 para marcar objetos con Spark. (Las etiquetas Amazon S3 son diferentes de las etiquetas Iceberg; para obtener más información, consulte la documentación de Iceberg). Por ejemplo:

    spark.sql.catalog.my_catalog.s3.delete-enabled=false and \ spark.sql.catalog.my_catalog.s3.delete.tags.my_key=to_archive
  2. Usa Spark en Amazon EMR o AWS Glue para eliminar instantáneas. Al utilizar la configuración del ejemplo, este procedimiento etiqueta los objetos y los separa de los metadatos de la tabla Iceberg en lugar de eliminarlos de Amazon S3.

  3. Utilice las reglas del ciclo de vida de S3 para transferir los objetos etiquetados to_archive a una de las clases de almacenamiento de S3 Glacier.

  4. Para consultar datos archivados:

Para obtener instrucciones detalladas, consulte la entrada del AWS blog Mejore la eficiencia operativa de las tablas Apache Iceberg basadas en los lagos de datos de Amazon S3.

 

Este patrón le permite conservar todas las versiones e instantáneas de las tablas a un costo menor.

No puede viajar en el tiempo ni volver a las instantáneas archivadas sin restaurar primero esas versiones como tablas nuevas. Esto suele ser aceptable para fines de auditoría.

Puede combinar este enfoque con el patrón de diseño anterior y establecer políticas de retención para instantáneas específicas.

Elimine los archivos huérfanos

En determinadas situaciones, las aplicaciones de Iceberg pueden fallar antes de que usted confirme sus transacciones. Esto deja los archivos de datos en Amazon S3. Como no se ha realizado ninguna confirmación, estos archivos no se asociarán a ninguna tabla, por lo que puede que tenga que limpiarlos de forma asíncrona.

Para gestionar estas eliminaciones, puede utilizar la declaración VACUUM en Amazon Athena. Esta declaración elimina las instantáneas y también elimina los archivos huérfanos. Esto resulta muy rentable, ya que Athena no cobra por el coste informático de esta operación. Además, no es necesario programar ninguna operación adicional al utilizar el VACUUM estado de cuenta.

Como alternativa, puedes usar Spark en Amazon EMR o AWS Glue ejecutar el remove_orphan_files procedimiento. Esta operación tiene un coste informático y debe programarse de forma independiente. Para obtener más información, consulte la documentación de Iceberg.