在 Athena 中使用压缩
Athena 支持多种用于读取和写入数据的压缩格式,例如从使用多种压缩格式的表中进行读取。例如,当某些 Parquet 文件使用 Snappy 压缩而其他 Parquet 文件使用 GZIP 压缩时,Athena 可以成功读取使用 Parquet 文件格式的表中的数据。同样的原则适用于 ORC、文本文件和 JSON 存储格式。
Athena 支持以下压缩格式:
-
BZIP2 – 使用 Burrows-Wheeler 算法的格式。
-
DEFLATE – 基于 LZSS
和 Huffman 编码 的压缩算法。Deflate 仅与 Avro 文件格式相关。 -
GZIP – 基于 Deflate 的压缩算法。对于 Athena 引擎版本 2 和 3 中的 Hive 表,以及 Athena 引擎版本 2 中的 Iceberg 表,GZIP 是 Parquet 和文本文件存储格式文件的默认写入压缩格式。不支持
tar.gz
格式的文件。 -
LZ4 – 属于 Lempel-Ziv 77 (LZ7) 系列,并且也侧重于压缩和解压缩速度,而非对数据的最大限度压缩。LZ4 具有以下成帧格式:
-
LZ4 Raw/Unframed – LZ4 数据块压缩格式的标准无帧实现。有关更多信息,请参阅 GitHub 上的 LZ4 数据块格式说明
。 -
LZ4 Framed – 常见的 LZ4 成帧实现。有关更多信息,请参阅 GitHub 上的 LZ4 帧格式说明
。 -
LZ4 Hadoop-Compatible – LZ4 的 Apache Hadoop 实现。此实现使用 BlockCompressorStream.java
类封装 LZ4 压缩。
-
-
LZO – 使用 Lempel–Ziv–Oberhumer 算法的格式,该算法侧重于高速压缩和解压缩,而非对数据的最大限度压缩。LZO 具有两个实现:
-
Standard LZO – 有关更多信息,请参阅 Oberhumer 网站上的 LZO 摘要
。 -
LZO Hadoop-Compatible – 此实现使用 BlockCompressorStream.java
类封装 LZO 算法。
-
-
SNAPPY – 属于 Lempel-Ziv 77 (LZ7) 系列的压缩算法。Snappy 侧重于高速压缩和解压速度,而非对数据的最大限度压缩。
-
ZLIB – 基于 Deflate,ZLIB 是 ORC 数据存储格式文件的默认写入压缩格式。有关更多信息,请参阅 GitHub 上的 zlib
页面。 -
ZSTD – Zstandard 实时数据压缩算法
是一种具有高压缩率的快速压缩算法。Zstandard(ZSTD)库作为使用 BSD 许可证的开源软件提供。ZSTD 是 Iceberg 表的默认压缩格式。在写入 ZSTD 压缩数据时,Athena 默认使用 ZSTD 压缩级别 3。有关在 Athena 中使用 ZSTD 压缩级别的更多信息,请参阅 使用 ZSTD 压缩级别。
注意
Athena 不支持写入以 LZ4 或 LZO 格式压缩的 Parquet 文件。我们支持读取这些压缩格式。
指定压缩格式
写入 CREATE TABLE 或 CTAS 语句时,您可以指定压缩属性,该属性可指定 Athena 写入这些表时要使用的压缩类型。
-
对于 CTAS,请参阅 CTAS 表属性。有关示例,请参阅CTAS 查询的示例。
-
对于 CREATE TABLE,请参阅 ALTER TABLE SET TBLPROPERTIES 以获取压缩表属性列表。
指定无压缩
CREATE TABLE 语句支持写入未压缩的文件。要写入未压缩的文件,请使用以下语法:
-
CREATE TABLE(文本文件或 JSON)– 在
TBLPROPERTIES
中,请指定write.compression = NONE
。 -
CREATE TABLE (Parquet) – 在
TBLPROPERTIES
中,请指定parquet.compression = UNCOMPRESSED
。 -
CREATE TABLE (ORC) – 在
TBLPROPERTIES
中,请指定orc.compress = NONE
。
注释和资源
-
目前,Athena 无法识别大写文件扩展名,例如
.GZ
或.BZIP2
。避免使用包含大写文件扩展名的数据集,或将数据文件扩展名重命名为小写。 -
对于 CSV、TSV 和 JSON 格式的数据,Athena 根据文件扩展名确定压缩类型。如果不存在文件扩展名,则 Athena 将数据视为未压缩的纯文本。如果您的数据已压缩,请确保文件名包含压缩扩展名,例如
gz
。 -
不支持 ZIP 文件格式。
-
对于从 Athena 查询 Amazon Data Firehose 日志,支持的格式包括 GZIP 压缩文件或采用 SNAPPY 压缩的 ORC 文件。
-
有关使用压缩的更多信息,请参阅 Amazon 大数据博客文章 Top 10 performance tuning tips for Amazon Athena
(Amazon Athena 的 10 大性能优化技巧)中的第 3 部分(“压缩和拆分文件”)。