在 Athena 中使用 ZSTD 压缩级别 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Athena 中使用 ZSTD 压缩级别

Zstandard 实时数据压缩算法 是一种具有高压缩比的快速压缩算法。Zstandard(ZSTD)库是一种开源软件,使用 BSD 许可证。Athena 支持读取和写入 ZSTD 压缩的 ORC、Parquet 和文本文件数据。

您可以根据自己的需求,使用 ZSTD 压缩级别来调整压缩比和速度。ZSTD 库支持的压缩级别为 1 到 22。Athena 默认使用的 ZSTD 压缩级别为 3。

通过压缩级别可以在压缩速度和要达到的压缩量之间进行精细平衡控制。压缩级别越低,速度越快,但文件越大。例如,在速度最为重要时,可以使用级别 1;在大小最为重要时,可以使用级别 22。默认设置为级别 3,适用于许多应用场景。使用大于 19 的级别时应当谨慎,因为这将需要更多内存。ZSTD 库还提供负压缩级别,从而扩展压缩速度和压缩比的范围。有关更多信息,请参阅 Zstandard 压缩 RFC

由于提供了多种压缩级别,因此可以充分进行微调优化。但在决定压缩级别时,请务必衡量您的数据量并相应权衡。我们建议使用默认级别 3 或介于 6 到 9 之间的级别,以便合理平衡压缩速度和压缩数据大小。20 及以上的级别应专用于大小最为重要且无需关注压缩速度的场景。

注意事项和限制

在 Athena 中使用 ZSTD 压缩级别时,请注意以下几点。

  • 仅 Athena 引擎版本 3 支持 ZSTD compression_level 属性。

  • ALTER TABLECREATE TABLECREATE TABLE AS(CTAS)和 UNLOAD 语句支持 ZSTDcompression_level 属性。

  • compression_level 属性是可选的。

  • 仅 ZSTD 压缩支持 compression_level 属性。

  • 可能的压缩级别为 1 到 22。

  • 默认压缩级别为 3。

有关 Athena 中的 Apache Hive ZSTD 压缩支持的信息,请参阅 不同文件格式支持的 Hive 表压缩。有关 Athena 中的 Apache Iceberg ZSTD 压缩支持的信息,请参阅 不同文件格式支持的 Iceberg 表压缩

指定 ZSTD 压缩级别

要为 ALTER TABLECREATE TABLECREATE TABLE ASUNLOAD 语句指定 ZSTD 压缩级别,请使用 compression_level 属性。要指定 ZSTD 压缩本身,您必须使用该语句的语法所用的单个压缩属性。

ALTER TABLE SET TBLPROPERTIES

ALTER TABLE SET TBLPROPERTIES 语句的 SET TBLPROPERTIES 子句中,使用 'write.compression' = ' ZSTD''parquet.compression' = 'ZSTD' 指定 ZSTD 压缩。然后使用 compression_level 属性指定一个介于 1 到 22 之间的值(例如 'compression_level' = 5)。如果您未指定压缩级别属性,则压缩级别默认为 3。

示例

以下示例将修改表 existing_table 以使用 Parquet 文件格式以及 ZSTD 压缩和 ZSTD 压缩级别 4。请注意,压缩级别值必须以字符串而不是整数形式输入。

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

CREATE TABLE

CREATE TABLE 语句的 TBLPROPERTIES 子句中,指定 'write.compression' = 'ZSTD''parquet.compression' = 'ZSTD',然后使用 compression_level = compression_level 并指定一个介于 1 到 22 之间的值。如果未指定 compression_level 属性,则默认压缩级别为 3。

示例

以下示例将以 Parquet 文件格式创建一个表,并使用 ZSTD 压缩和 ZSTD 压缩级别 4。

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)

CREATE TABLE AS 语句的 WITH 子句中,指定 write_compression = 'ZSTD'parquet_compression = 'ZSTD',然后使用 compression_level = compression_level 并指定一个介于 1 到 22 之间的值。如果未指定 compression_level 属性,则默认压缩级别为 3。

示例

以下 CTAS 示例将指定使用 Parquet 文件格式以及 ZSTD 压缩和 ZSTD 压缩级别 4。

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

UNLOAD

UNLOAD 语句的 WITH 子句中,指定 compression = 'ZSTD',然后使用 compression_level = compression_level 并指定一个介于 1 到 22 之间的值。如果未指定 compression_level 属性,则默认压缩级别为 3。

示例

以下示例将使用 Parquet 文件格式、ZSTD 压缩和 ZSTD 压缩级别 4 将查询结果卸载到指定位置。

UNLOAD (SELECT * FROM old_table) TO 's3://DOC-EXAMPLE-BUCKET/' WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)