

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

# 使用 ZSTD 壓縮級別
<a name="compression-support-zstd-levels"></a>

[Zstandard 即時資料壓縮演算法](http://facebook.github.io/zstd/)是一種提供高壓縮比的快速壓縮演算法。Zstandard (ZSTD) 程式庫是開放原始碼軟體，使用 BSD 授權。Athena 支援讀取和寫入 ZStandard 壓縮的 ORC、Parquet 和文字檔案資料。

您可以使用 ZSTD 壓縮級別根據自己的要求調整壓縮比和速度。ZSTD 庫支援從 1 到 22 的壓縮級別。Athena 預設使用 ZSTD 壓縮級別 3。

壓縮級別在壓縮速度和達到的壓縮量之間提供了細微的權衡。壓縮級別越低，速度越快，但檔案大小更大。例如，如果速度最重要，則可以使用級別 1，如果大小最重要，則可以使用級別 22。級別 3 適用於許多使用案例，且為預設值。請謹慎使用大於 19 的級別，因為這些級別需要更多的記憶體。ZSTD 庫還提供負壓縮級別，其可擴展壓縮速度和比率的範圍。如需詳細資訊，請參閱 [Zstandard 壓縮 RFC](https://datatracker.ietf.org/doc/html/rfc8478)。

豐富的壓縮級別為微調提供了大量機會。但是，請確保在決定壓縮級別時測量資料並考慮權衡。建議使用預設級別 3，或 6 到 9 之間的級別，以便在壓縮速度與壓縮資料大小之間取得合理的權衡。對於大小最重要且壓縮速度不是問題的情況，預留級別 20 或更高。

## 考量和限制
<a name="compression-support-zstd-levels-considerations-and-limitations"></a>

在 Athena 中使用 ZSTD 壓縮級別時，請考慮下列幾點。
+ 只有 Athena 引擎版本 3 中才支援 ZSTD `compression_level` 屬性。
+ `ALTER TABLE`、`CREATE TABLE`、`CREATE TABLE AS` (CTAS) 以及 `UNLOAD` 陳述式支援 ZSTD `compression_level` 屬性。
+ `compression_level` 屬性是選用屬性。
+ 只有 ZSTD 壓縮才支援 `compression_level` 屬性。
+ 可能的壓縮級別為 1 到 22。
+ 預設壓縮級別為 3。

如需有關 Athena 中 Apache Hive ZSTD 壓縮支援的資訊，請參閱 [使用 Hive 資料表壓縮](compression-support-hive.md)。如需有關 Athena 中 Apache Iceberg ZSTD 壓縮支援的資訊，請參閱 [使用 Iceberg 資料表壓縮](compression-support-iceberg.md)。

## 指定 ZSTD 壓縮級別
<a name="compression-support-zstd-levels-specifying"></a>

若要指定 `ALTER TABLE`、`CREATE TABLE`、`CREATE TABLE AS` 和 `UNLOAD` 陳述式的 ZSTD 壓縮級別，請使用 `compression_level` 屬性。若要指定 ZSTD 壓縮本身，您必須使用陳述式語法所使用的單獨壓縮屬性。

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

在 [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) 陳述式 `SET TBLPROPERTIES` 子句中，使用 `'write.compression' = ' ZSTD'` 或 `'parquet.compression' = 'ZSTD'` 指定 ZSTD 壓縮。然後使用 `compression_level` 屬性來指定 1 到 22 之間的值 (例如，'`compression_level' = '5'`)。如果您沒有指定壓縮級別屬性，則壓縮級別會預設為 3。

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

下列範例會修改資料表 `existing_table`，以使用具有 ZSTD 壓縮和 ZSTD 壓縮級別 4 的 Parquet 檔案格式。請注意，在 `TBLPROPERTIES` 子句中，壓縮級別值必須輸入為字串而不是整數，因此必須用單引號或雙引號括住。

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

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

在 [CREATE TABLE](create-table.md) 陳述式 `TBLPROPERTIES` 子句中，指定 '`write.compression' = 'ZSTD'` 或 `'parquet.compression' = 'ZSTD'`，然後使用 `compression_level = compression_level` 並指定介於 1 到 22 之間的字串值。如果未指定 `compression_level` 屬性，則預設壓縮級別為 3。

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

下列範例使用 ZSTD 壓縮和 ZSTD 壓縮級別 4 建立 Parquet 檔案格式的資料表。

```
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>

在 [CREATE TABLE AS](create-table-as.md) 陳述式 `WITH` 子句中，指定 `write_compression = 'ZSTD'` 或 `parquet_compression = 'ZSTD'`，然後使用 `compression_level = compression_level` 並指定介於 1 到 22 之間的整數值。如果未指定 `compression_level` 屬性，則預設壓縮級別為 3。

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

下列 CTAS 範例使用 ZSTD 壓縮和 ZSTD 壓縮級別 4，將 Parquet 指定為檔案格式。請注意，在 `WITH` 子句中，壓縮級別值必須指定為整數而不是字串。

```
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>

在 [UNLOAD](unload.md) 陳述式 `WITH` 子句中，指定 `compression = 'ZSTD'`，然後使用 `compression_level = compression_level` 並指定介於 1 到 22 之間的整數值。如果未指定 `compression_level` 屬性，則預設壓縮級別為 3。

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

下列範例會使用 Parquet 檔案格式、ZSTD 壓縮和 ZSTD 壓縮級別 4，將查詢結果卸載到指定的位置。

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