

# VACUUM
<a name="vacuum-statement"></a>

`VACUUM` ステートメントは、[スナップショットの有効期限切れ](https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots)と[孤立ファイルの削除](https://iceberg.apache.org/docs/latest/spark-procedures/#remove_orphan_files)を実行して、Apache Iceberg テーブルのテーブルメンテナンスを実行します。

**注記**  
`VACUUM` はトランザクションで、Athena エンジンバージョン 3 の Apache Iceberg テーブルでのみサポートされています。

`VACUUM` ステートメントは、ストレージの消費量を減らすことで Iceberg テーブルを最適化します。`VACUUM` の使用の詳細については、「[Iceberg テーブルを最適化する](querying-iceberg-data-optimization.md)」を参照してください。`VACUUM` ステートメントは Amazon S3 に API 呼び出しを行うため、Amazon S3 への関連するリクエストに対して料金がかかることに注意してください。

**警告**  
スナップショット有効期限切れオペレーションを実行すると、期限切れのスナップショットへのタイムトラベルができなくなります。

## 概要
<a name="vacuum-statement-synopsis"></a>

Iceberg テーブルで不要になったデータファイルを削除するには、次の構文を使用します。

```
VACUUM [{{database_name}}.]{{target_table}}
```
+ `VACUUM` は、Iceberg データが Amazon S3 バケットではなく Amazon S3 フォルダに格納されることを想定しています。例えば、Iceberg データが `s3://amzn-s3-demo-bucket/myicebergfolder/` ではなく `s3://amzn-s3-demo-bucket`/ に格納されている場合、`VACUUM` ステートメントは「GENERIC\_INTERNAL\_ERROR: ファイルシステムロケーション: `s3://amzn-s3-demo-bucket` にパスがありません」というエラーで失敗します。
+ `VACUUM` がデータファイルを削除できるようにするには、クエリ実行ロールに、Iceberg テーブル、メタデータ、スナップショット、およびデータファイルが配置されているバケットに対する `s3:DeleteObject` 許可が必要です。許可が存在しない場合、`VACUUM` クエリは成功しますが、ファイルは削除されません。
+ アンダースコアで始まる名前 (例: `_mytable`) を持つテーブルで `VACUUM` を実行するには、次の例にあるようにテーブル名をバックティックで囲みます。テーブル名の前にデータベース名を付ける場合は、データベース名をバックティックで囲まないでください。バックティックの代わりに二重引用符を使用しても機能しないことに注意してください。

  この動作は `VACUUM` に固有の動作です。`CREATE` および `INSERT INTO` ステートメントでは、アンダースコアで始まるテーブル名にバックティックは必要ありません。

  ```
  VACUUM `_mytable`
  VACUUM my_database.`_mytable`
  ```

## 実行されたオペレーション
<a name="vacuum-statement-operations-performed"></a>

`VACUUM` では以下のオペレーションを実行します。
+ `vacuum_max_snapshot_age_seconds` テーブルプロパティで指定された時間よりも古いスナップショットを削除します。デフォルトでは、このプロパティは 432,000 秒 (5 日間) に設定されています。
+ 保持期間に含まれていないスナップショットのうち、`vacuum_min_snapshots_to_keep` テーブルプロパティで指定された数を超えているスナップショットを削除します。デフォルト は 1 です。

  これらのテーブルプロパティは `CREATE TABLE` ステートメントで指定できます。テーブルを作成した後、[ALTER TABLE SET TBLPROPERTIES](querying-iceberg-alter-table-set-properties.md) ステートメントを使用してテーブルを更新できます。
+ スナップショットを削除した結果としてアクセスできなかったメタデータおよびデータファイルをすべて削除します。`vacuum_max_metadata_files_to_keep` テーブルプロパティを設定すると、保持する古いメタデータファイルの数を設定できます。デフォルト値は 100 です。
+ `vacuum_max_snapshot_age_seconds` テーブルプロパティで指定された時間より古い孤立ファイルを削除します。孤立ファイルとは、テーブルのデータディレクトリにある、テーブルステートの一部ではないファイルです。

Athena で Apache Iceberg テーブルを作成および管理する方法については、「[Iceberg テーブルを作成する](querying-iceberg-creating-tables.md)」および「[Iceberg テーブルを管理する](querying-iceberg-managing-tables.md)」を参照してください。