VACUUM
VACUUM
ステートメントは、スナップショットの有効期限切れ
注記
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 TBLPROPERTIES ステートメントを使用してテーブルを更新できます。 -
スナップショットを削除した結果としてアクセスできなかったメタデータおよびデータファイルをすべて削除します。
vacuum_max_metadata_files_to_keep
テーブルプロパティを設定すると、保持する古いメタデータファイルの数を設定できます。デフォルト値は 100 です。 -
vacuum_max_snapshot_age_seconds
テーブルプロパティで指定された時間より古い孤立ファイルを削除します。孤立ファイルとは、テーブルのデータディレクトリにある、テーブルステートの一部ではないファイルです。
Athena で Apache Iceberg テーブルを作成および管理する方法については、「Iceberg テーブルを作成する」および「Iceberg テーブルを管理する」を参照してください。