

# Uso de niveles de compresión de ZSTD
<a name="compression-support-zstd-levels"></a>

El [algoritmo de compresión de datos en tiempo real Zstandard](http://facebook.github.io/zstd/) es un algoritmo de compresión rápida que proporciona relaciones de compresión elevadas. La biblioteca Zstandard (ZSTD) es software de código abierto y utiliza una licencia BSD. Athena es compatible con la lectura y la escritura de datos de archivos de texto, Parquet y ORC comprimidos con ZSTD.

Puede utilizar los niveles de compresión ZSTD para ajustar la relación y velocidad de compresión de acuerdo con sus requisitos. La biblioteca ZSTD admite niveles de compresión comprendidos entre 1 y 22. Athena utiliza el nivel 3 de compresión ZSTD de manera predeterminada.

Los niveles de compresión permiten conseguir un equilibrio preciso entre la velocidad de compresión y la cantidad de compresión lograda. Los niveles de compresión más bajos proporcionan más velocidad, pero también tamaños de archivo más mayores. Por ejemplo, se puede utilizar el nivel 1 si la velocidad es la prioridad, y el nivel 22 si el tamaño es lo más importante. El nivel 3 es adecuado para muchos casos de uso, y es el predeterminado. Utilice los niveles superiores a 19 con precaución, ya que requieren más memoria. La biblioteca ZSTD también ofrece niveles de compresión negativos que amplían el intervalo de velocidades y relaciones de compresión. Para obtener más información, consulte el [documento RFC sobre compresión Zstandard](https://datatracker.ietf.org/doc/html/rfc8478).

La abundancia de niveles de compresión ofrece importantes posibilidades de realizar ajustes precisos. No obstante, asegúrese de medir los datos y tener en cuenta las ventajas y desventajas a la hora de decidir el nivel de compresión. Se recomienda utilizar el nivel predeterminado 3 o un nivel comprendido entre 6 y 9 para lograr un equilibrio razonable entre la velocidad de compresión y el tamaño de los datos comprimidos. Reserve los niveles de 20 y posteriores para aquellos casos en que el tamaño sea lo más importante y la velocidad de compresión no suponga un problema.

## Consideraciones y limitaciones
<a name="compression-support-zstd-levels-considerations-and-limitations"></a>

Cuando utilice los niveles de compresión ZSTD en Athena, tenga en cuenta los siguientes puntos.
+ La propiedad `compression_level` de ZSTD solo es compatible con la versión 3 del motor Athena.
+ La propiedad `compression_level` de ZSTD es compatible con las instrucciones `ALTER TABLE`, `CREATE TABLE` y `CREATE TABLE AS` (CTAS), y `UNLOAD`.
+ La propiedad `compression_level` es opcional.
+ La propiedad `compression_level` solo es compatible con la compresión ZSTD.
+ Los niveles de compresión posibles están comprendidos entre 1 y 22.
+ El nivel de compresión predeterminado es 3.

Para obtener información sobre la compatibilidad de compresión para Apache Hive ZSTD en Athena, consulte [Uso de compresión de tablas de Hive](compression-support-hive.md). Para obtener información sobre la compatibilidad de compresión para Apache Iceberg ZSTD en Athena, consulte [Uso de la compresión de tablas de Iceberg](compression-support-iceberg.md).

## Especificación de los niveles de compresión de ZSTD
<a name="compression-support-zstd-levels-specifying"></a>

Para especificar el nivel de compresión ZSTD de las instrucciones `ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` y `UNLOAD`, utilice la propiedad `compression_level`. Para especificar la compresión ZSTD propiamente dicha, debe utilizar la propiedad de compresión individual que utilice la sintaxis de la instrucción.

### ALTER TABLE SET TBLPROPERTIES
<a name="compression-support-zstd-levels-alter-table"></a>

En la cláusula `SET TBLPROPERTIES` de la instrucción [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md), especifique la compresión ZSTD mediante `'write.compression' = ' ZSTD'` o `'parquet.compression' = 'ZSTD'`. Después, utilice la propiedad `compression_level` para especificar un valor comprendido entre 1 y 22 (por ejemplo, '`compression_level' = '5'`). Si no especifica ninguna propiedad de nivel de compresión, el nivel de compresión se establece en 3 de manera predeterminada.

#### Ejemplo
<a name="compression-support-zstd-levels-alter-table-example"></a>

En el siguiente ejemplo se modifica la tabla `existing_table` para que utilice el formato de archivo Parquet con compresión ZSTD y nivel 4 de compresión ZSTD. En la cláusula `TBLPROPERTIES`, el valor del nivel de compresión debe introducirse como una cadena y no como un entero y, por lo tanto, debe introducirse entre comillas simples o dobles.

```
ALTER TABLE existing_table 
SET TBLPROPERTIES ('parquet.compression' = 'ZSTD', 'compression_level' = '4')
```

### CREATE TABLE
<a name="compression-support-zstd-levels-create-table"></a>

En la cláusula `TBLPROPERTIES` de la instrucción [CREATE TABLE](create-table.md), especifique '`write.compression' = 'ZSTD'` o `'parquet.compression' = 'ZSTD'` y, a continuación, utilice `compression_level = compression_level` y especifique un valor comprendido entre 1 y 22 como una cadena. Si no se especifica la propiedad `compression_level`, el nivel de compresión predeterminado es 3.

#### Ejemplo
<a name="compression-support-zstd-levels-create-table-example"></a>

En el siguiente ejemplo se crea una tabla con formato de archivo Parquet mediante compresión ZSTD y el nivel 4 de compresión ZSTD. 

```
CREATE EXTERNAL TABLE new_table ( 
  `col0` string COMMENT '', 
  `col1` string COMMENT '' 
) 
STORED AS PARQUET 
LOCATION 's3://amzn-s3-demo-bucket/' 
TBLPROPERTIES ('write.compression' = 'ZSTD', 'compression_level' = '4')
```

### CREATE TABLE AS (CTAS)
<a name="compression-support-zstd-levels-ctas"></a>

En la cláusula `WITH` de la instrucción [CREATE TABLE AS](create-table-as.md), especifique `write_compression = 'ZSTD'` o `parquet_compression = 'ZSTD'` y, a continuación, utilice `compression_level = compression_level` y especifique un valor comprendido entre 1 y 22 como un entero. Si no se especifica la propiedad `compression_level`, el nivel de compresión predeterminado es 3.

#### Ejemplo
<a name="compression-support-zstd-levels-ctas-example"></a>

En el siguiente ejemplo de CTAS se especifica Parquet como formato de archivo mediante compresión ZSTD con un nivel de compresión 4. En la cláusula `WITH`, el valor del nivel de compresión debe especificarse como un entero, no como una cadena.

```
CREATE TABLE new_table  
WITH ( format = 'PARQUET', write_compression = 'ZSTD', compression_level = 4)  
AS SELECT * FROM old_table
```

### UNLOAD
<a name="compression-support-zstd-levels-unload"></a>

En la cláusula `WITH` de la instrucción [UNLOAD](unload.md), especifique `compression = 'ZSTD'` y, a continuación, utilice `compression_level = compression_level` y especifique un valor comprendido entre 1 y 22 como un entero. Si no se especifica la propiedad `compression_level`, el nivel de compresión predeterminado es 3.

#### Ejemplo
<a name="compression-support-zstd-levels-unload-example"></a>

En el siguiente ejemplo se descargan los resultados de la consulta en la ubicación especificada mediante el formato de archivo Parquet, compresión ZSTD y el nivel 4 de compresión ZSTD.

```
UNLOAD (SELECT * FROM old_table) 
TO 's3://amzn-s3-demo-bucket/' 
WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)
```