

# VACUUM
<a name="vacuum-statement"></a>

La instrucción `VACUUM` realiza el mantenimiento de las tablas de Apache Iceberg al ocuparse del [vencimiento de las instantáneas](https://iceberg.apache.org/docs/latest/spark-procedures/#remove_orphan_files) y la [eliminación de los archivos huérfanos](https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots).

**nota**  
`VACUUM` es transaccional y solo es compatible con las tablas de Apache Iceberg en la versión 3 del motor Athena.

La instrucción `VACUUM` optimiza las tablas de Iceberg al reducir el consumo de almacenamiento. Para obtener más información acerca del uso de `VACUUM`, consulte [Optimización de las tablas de Iceberg](querying-iceberg-data-optimization.md). Tenga en cuenta que, debido a que la instrucción `VACUUM` realiza llamadas de API a Amazon S3, se aplican cargos por las solicitudes asociadas a Amazon S3.

**aviso**  
Si ejecuta una operación de vencimiento de instantáneas, ya no podrá viajar en el tiempo a instantáneas vencidas.

## Sinopsis
<a name="vacuum-statement-synopsis"></a>

Para eliminar los archivos de datos que ya no se necesitan para una tabla de Iceberg, use la siguiente sintaxis.

```
VACUUM [database_name.]target_table
```
+ Tenga en cuenta que `VACUUM` espera que los datos de Iceberg estén en una carpeta de Amazon S3 en lugar de estar en un bucket de Amazon S3. Por ejemplo, si los datos de Iceberg se encuentran en `s3://amzn-s3-demo-bucket`/ en lugar de `s3://amzn-s3-demo-bucket/myicebergfolder/`, la instrucción `VACUUM` falla con el mensaje de error GENERIC\$1INTERNAL\$1ERROR: Falta la ruta en la ubicación del sistema de archivos: `s3://amzn-s3-demo-bucket`.
+ Para que `VACUUM` pueda eliminar archivos de datos, su función de ejecución de consultas debe tener `s3:DeleteObject` permisos en el bucket en el que se encuentran las tablas, los metadatos, las instantáneas y los archivos de datos de Iceberg. Si el permiso no está presente, la consulta `VACUUM` se realizará correctamente, pero los archivos no se eliminarán. 
+ Para ejecutar `VACUUM` en una tabla cuyo nombre comience con un guión bajo (por ejemplo, `_mytable`), encierre el nombre de la tabla entre comillas inversas, como en el siguiente ejemplo. Si antepone al nombre de la tabla un nombre de base de datos, no encierre el nombre de la base de datos entre comillas inversas. Tenga en cuenta que las comillas dobles no funcionarán en lugar de las comillas inversas. 

  Este comportamiento es específico de `VACUUM`. Las instrucciones `CREATE` y `INSERT INTO` no requieren comillas inversas para los nombres de tabla que comienzan con guiones bajos.

  ```
  VACUUM `_mytable`
  VACUUM my_database.`_mytable`
  ```

## Operaciones realizadas
<a name="vacuum-statement-operations-performed"></a>

`VACUUM` lleva a cabo las siguientes operaciones:
+ Elimina las instantáneas que tengan una antigüedad superior a la cantidad de tiempo especificada en la propiedad de la tabla `vacuum_max_snapshot_age_seconds`. De forma predeterminada, esta propiedad se establece en 432 000 segundos (5 días).
+ Elimina las instantáneas que no estén dentro del periodo de conservación y que superen el número especificado en la propiedad de la tabla `vacuum_min_snapshots_to_keep`. El valor predeterminado de es 1.

  Puede especificar estas propiedades de la tabla en su instrucción `CREATE TABLE`. Después de crear la tabla, se puede usar la instrucción [ALTER TABLE SET TBLPROPERTIES](querying-iceberg-alter-table-set-properties.md) para actualizarla. 
+ Elimina los metadatos y los archivos de datos a los que no se pueda acceder como resultado de la eliminación de la instantánea. Puede configurar la cantidad de archivos de metadatos antiguos que se van a retener al configurar la propiedad de la tabla `vacuum_max_metadata_files_to_keep`. El valor predeterminado es 100.
+ Elimina los archivos huérfanos que tienen una antigüedad superior al tiempo especificado en la propiedad de la tabla `vacuum_max_snapshot_age_seconds`. Los archivos huérfanos son archivos del directorio de datos de la tabla que no forman parte del estado de la tabla.

Para obtener más información acerca de la creación y administración de tablas de Apache Iceberg en Athena, consulte [Creación de tablas de Iceberg](querying-iceberg-creating-tables.md) y [Administración de tablas de Iceberg](querying-iceberg-managing-tables.md).