

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

# 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`/ 而非 `s3://amzn-s3-demo-bucket/myicebergfolder/`，則 `VACUUM` 陳述式會失敗，並顯示錯誤訊息 GENERIC\$1INTERNAL\$1ERROR：檔案系統位置中缺少路徑：`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` 資料表屬性指定之時間的快照。依預設，此屬性已設為 432000 秒 (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)。