VACUUM - Amazon Athena

VACUUM

VACUUM ステートメントは、スナップショットの有効期限切れ孤立ファイルの削除を実行して、Apache Iceberg テーブルのテーブルメンテナンスを実行します。

注記

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

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

警告

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

概要

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`

実行されたオペレーション

VACUUM では以下のオペレーションを実行します。

  • vacuum_max_snapshot_age_seconds テーブルプロパティで指定された時間よりも古いスナップショットを削除します。デフォルトでは、このプロパティは 432,000 秒 (5 日間) に設定されています。

  • 保持期間に含まれていないスナップショットのうち、vacuum_min_snapshots_to_keep テーブルプロパティで指定された数を超えているスナップショットを削除します。デフォルト は 1 です。

    これらのテーブルプロパティは CREATE TABLE ステートメントで指定できます。テーブルを作成した後、ALTER TABLE SET PROPERTIES ステートメントを使用してテーブルを更新できます。

  • スナップショットを削除した結果としてアクセスできなかったメタデータおよびデータファイルをすべて削除します。vacuum_max_metadata_files_to_keep テーブルプロパティを設定すると、保持する古いメタデータファイルの数を設定できます。デフォルト値は 100 です。

  • vacuum_max_snapshot_age_seconds テーブルプロパティで指定された時間より古い孤立ファイルを削除します。孤立ファイルとは、テーブルのデータディレクトリにある、テーブルステートの一部ではないファイルです。

Athena で Apache Iceberg テーブルを作成および管理する方法については、「Iceberg テーブルを作成する」および「Iceberg テーブルを管理する」を参照してください。