Uso de los niveles de compresión ZSTD en Athena - Amazon Athena

Uso de los niveles de compresión ZSTD en Athena

El algoritmo de compresión de datos en tiempo real Zstandard 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.

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

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 Compatibilidad de compresión de tablas de Hive por formato de archivo. Para obtener información sobre la compatibilidad de compresión para Apache Iceberg ZSTD en Athena, consulte Compatibilidad de compresión de tablas de Iceberg por formato de archivo.

Especificación de los niveles de compresión ZSTD

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

En la cláusula SET TBLPROPERTIES de la instrucción ALTER TABLE SET TBLPROPERTIES, 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

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. Tenga en cuenta que el valor del nivel de compresión debe introducirse como una cadena y no como un entero.

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

CREATE TABLE

En la cláusula TBLPROPERTIES de la instrucción CREATE TABLE, 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. Si no se especifica la propiedad compression_level, el nivel de compresión predeterminado es 3.

Ejemplo

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://DOC-EXAMPLE-BUCKET/' TBLPROPERTIES ('write.compression' = 'ZSTD', 'compression_level' = 4)

CREATE TABLE AS (CTAS)

En la cláusula WITH de la instrucción CREATE TABLE AS, 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. Si no se especifica la propiedad compression_level, el nivel de compresión predeterminado es 3.

Ejemplo

En el siguiente ejemplo de CTAS se especifica Parquet como formato de archivo mediante compresión ZSTD con un nivel de compresión 4.

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

UNLOAD

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

Ejemplo

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://DOC-EXAMPLE-BUCKET/' WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)