

# ZSTD 圧縮レベルを使用する
<a name="compression-support-zstd-levels"></a>

[Zstandard リアルタイムデータ圧縮アルゴリズム](http://facebook.github.io/zstd/)は、高い圧縮率を実現する高速圧縮アルゴリズムです。Zstandard (ZSTD) ライブラリは、オープンソースソフトウェアであり、BSD ライセンスを使用します。Athena は、ZSTD で圧縮された ORC、Parquet、およびテキストファイルでの、データの読み取りと書き込みをサポートしています。

ZSTD 圧縮レベルを使用すると、要件に応じて圧縮率や速度を調整できます。ZSTD ライブラリは、1 から 22 までの圧縮レベルをサポートします。Athena はデフォルトで ZSTD 圧縮レベル 3 を使用しています。

圧縮レベルは、圧縮速度や達成された圧縮量の間の細かいトレードオフを提供します。圧縮レベルが低くなるほど速度は速くなりますが、ファイルサイズは大きくなります。たとえば、速度が最も重要である場合にはレベル 1 を使用し、サイズが最も重要な場合はレベル 22 を使用できます。レベル 3 は多数のユースケースに適しており、デフォルトです。19 以上のレベルは、より多くのメモリを必要とするため、注意してご使用ください。また、ZSTD ライブラリには、圧縮速度と圧縮率の範囲を広げる負の圧縮レベルも用意されています。詳細については、「[Zstandard Compression RFC](https://datatracker.ietf.org/doc/html/rfc8478)」(Zstandard 圧縮 RFC) を参照してください。

豊富な圧縮レベルにより、大幅に微調整できる機会が増えます。ただし、圧縮レベルを決定する際には、必ずデータを測定し、そのトレードオフを考慮してください。圧縮速度と圧縮データ サイズの間の合理的なトレードオフのためには、デフォルトレベルである 3 または 6～9 の範囲のレベルを使用することをお勧めします。サイズが最も重要で、圧縮速度が問題にならない場合は、レベル 20 以上を確保します。

## 考慮事項と制限事項
<a name="compression-support-zstd-levels-considerations-and-limitations"></a>

Athena で ZSTD 圧縮レベルを使用する際は、以下の点を考慮してください。
+ ZTSD `compression_level` プロパティは、Athena エンジンバージョン 3 でのみサポートされます。
+ ZSTD `compression_level` プロパティは、`ALTER TABLE`、`CREATE TABLE`、`CREATE TABLE AS` (CTAS)、および `UNLOAD` ステートメントでサポートされています。
+ `compression_level` プロパティはオプションです。
+ `compression_level` プロパティは ZSTD 圧縮でのみサポートされます。
+ 可能な圧縮レベルは 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 の例では、圧縮レベル 4 の ZSTD 圧縮を使用して、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)
```