

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Athena 中使用壓縮
<a name="compression-formats"></a>

Athena 支援各種壓縮格式來讀取和寫入資料，包括從使用多種壓縮格式的資料表讀取。例如，當某些 Parquet 檔案使用 Snappy 壓縮而其他 Parquet 檔案使用 GZIP 壓縮時，Athena 可以成功讀取使用 Parquet 檔案格式的資料表中的資料。相同的原則適用於 ORC、文字檔案和 JSON 儲存格式。

## 支援的壓縮格式
<a name="compression-support-formats"></a>

Athena 支援以下壓縮格式：
+ **BZIP2** – 使用 Burrows-Wheeler 演算法的格式。
+ **DEFLATE** – 基於 [LZSS](https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski) 和 [Huffman 編碼](https://en.wikipedia.org/wiki/Huffman_coding)的壓縮演算法。[Deflate](https://en.wikipedia.org/wiki/Deflate) 僅適用於 Avro 檔案格式。
+ **GZIP** – 以 Deflate 為基礎的壓縮演算法。對於 Athena 引擎版本 2 和 3 中的 Hive 資料表，以及 Athena 引擎版本 2 中的 Iceberg 資料表，GZIP 是採用 Parquet 格式和文字檔案存儲格式之檔案的預設寫入壓縮格式。不支援 `tar.gz` 格式的檔案。
+ **LZ4** – Lempel-Ziv 77 (LZ7) 系列的這個成員也著重於壓縮和解壓縮速度，而不是資料的最大壓縮。LZ4 具有以下框架格式：
  + **LZ4 原始/無框架** – LZ4 區塊壓縮格式的無框架標準實作。如需詳細資訊，請參閱 GitHub 上的 [LZ4 區塊格式說明](https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md)。
  + **LZ4 框架** – LZ4 的一般框架實作。如需詳細資訊，請參閱 GitHub 上的 [LZ4 框架格式說明](https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md)。
  + **LZ4 Hadoop 相容** – LZ4 的 Apache Haddop 實作。這個實作使用 [BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java) 類別包裝 LZ4 壓縮。
+ **LZO** – 使用 Lempel–Ziv–Oberhumer 演算法的格式，該演算法著重於高壓縮和解壓縮速度，而不是資料的最大壓縮。LZO 有兩種實作：
  + **標準 LZO** – 如需詳細資訊，請參閱 Oberhumer 網站上的 LZO [摘要](http://www.oberhumer.com/opensource/lzo/#abstract)。
  + **LZO Hadoop 相容** – 這個實作使用 [BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java) 類別包裝 LZO 演算法。
+ **SNAPPY** – 屬於 Lempel-Ziv 77 (LZ7) 系列的壓縮演算法。Snappy 著重於高壓縮和解壓縮速度，而不是資料的最大壓縮。
+ **ZLIB** – 根據 Deflate，ZLIB 是 ORC 資料儲存格式中檔案的預設寫入壓縮格式。如需詳細資訊，請參閱 GitHub 上的 [zlib](https://github.com/madler/zlib) 頁面。
+  **ZSTD** – [Zstandard 即時資料壓縮演算法](http://facebook.github.io/zstd/)是一種提供高壓縮比的快速壓縮演算法。Zstandard (ZSTD) 程式庫是使用 BSD 授權作為開放原始碼所提供。ZSTD 是 Iceberg 資料表的預設壓縮。寫入 ZSTD 壓縮資料時，Athena 預設使用 ZSTD 壓縮級別 3。如需有關在 Athena 中使用 ZSTD 壓縮級別的詳細資訊，請參閱 [使用 ZSTD 壓縮級別](compression-support-zstd-levels.md)。

**注意**  
Athena 不支援寫入以 LZ4 或 LZO 格式壓縮的 Parquet 檔案。支援讀取這些壓縮格式。

## 指定壓縮格式
<a name="compression-support-specifying-compression-formats"></a>

當您寫入 CREATE TABLE 或 CTAS 陳述式時，您可以指定壓縮屬性，以指定 Athena 寫入這些資料表時要使用的壓縮類型。
+ 如需 CTAS 的資訊，請參閱 [CTAS 資料表屬性](create-table-as.md#ctas-table-properties)。如需範例，請參閱 [CTAS 查詢的範例](ctas-examples.md)。
+ 如需 CREATE TABLE 的資訊，請參閱 [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) 以取得壓縮資料表屬性的清單。

## 指定未壓縮
<a name="compression-support-specifying-no-compression"></a>

CREATE TABLE 陳述式支援寫入未壓縮的檔案。若要編寫未壓縮檔案，請使用下列語法：
+ CREATE TABLE (文字檔案或 JSON) – 在 `TBLPROPERTIES` 中，指定 `write.compression = NONE`。
+ CREATE TABLE (Parquet) – 在 `TBLPROPERTIES` 中，指定 `parquet.compression = UNCOMPRESSED`。
+ CREATE TABLE (ORC) – 在 `TBLPROPERTIES` 中，指定 `orc.compress = NONE`。

## 備註和資源
<a name="compression-support-notes-and-resources"></a>
+ 目前 Athena 無法識別大寫的副檔名，諸如 `.GZ` 或 `.BZIP2`。避免使用大寫副檔名的資料集，或將資料副檔名重新以小寫字母命名。
+ 若為 CSV、TSV 和 JSON 的資料，Athena 會根據副檔名決定壓縮類型。如果不存在任何副檔名，Athena 會將資料視為未壓縮的純文字。如果您的資料已壓縮，請確定檔案名稱包含副檔名，例如 `gz`。
+ 不支援 ZIP 檔案格式。
+ 如需從 Athena 查詢 Amazon Data Firehose 日誌，支援的格式包括 GZIP 壓縮或具有 SNAPPY 壓縮的 ORC 檔案。
+ 如需使用壓縮的詳細資訊，請參閱 Amazon Athena AWS 大數據部落格文章前 10 大效能調校秘訣的第 3 節 (「壓縮和分割檔案」)。 [ Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/)

**Topics**
+ [指定壓縮格式](#compression-support-specifying-compression-formats)
+ [指定未壓縮](#compression-support-specifying-no-compression)
+ [備註和資源](#compression-support-notes-and-resources)
+ [Hive 資料表壓縮](compression-support-hive.md)
+ [Iceberg 資料表壓縮](compression-support-iceberg.md)
+ [ZSTD 壓縮級別](compression-support-zstd-levels.md)