

# スナップショット保持の最適化
<a name="snapshot-retention-management"></a>

Apache Iceberg スナップショット保持機能を使用すると、ユーザーは特定の時点で履歴データをクエリし、テーブルへの不要な変更を元に戻すことができます。AWS Glue データカタログでは、スナップショット保持設定により、これらのスナップショット (テーブルデータのバージョン) の有効期限が切れて削除されるまでの保持期間が制御されます。これは、設定された保持期間または保持するスナップショットの最大数に基づいて古いスナップショットを自動的に削除することで、ストレージコストとメタデータのオーバーヘッドを管理するのに役立ちます。

保持期間を日数で設定し、テーブルに保持するスナップショットの最大数を設定できます。AWS Glue は、最新のスナップショットを設定した上限まで保持しながら、指定された保持期間より古いスナップショットをテーブルメタデータから削除します。メタデータから古いスナップショットを削除すると、AWS Glue は、参照されなくなった、期限切れのスナップショットに固有の対応するデータとメタデータファイルを削除します。これにより、有効期限が切れたスナップショットデータで使用されていたストレージ領域を再利用しながら、保持されている残りのスナップショットまでのタイムトラベルクエリのみが可能になります。

**Topics**
+ [スナップショット保持オプティマイザーの有効化](enable-snapshot-retention.md)
+ [スナップショット保持オプティマイザーの更新](update-snapshot-retention.md)
+ [スナップショット保持オプティマイザーの無効化](disable-snapshot-retention.md)

# スナップショット保持オプティマイザーの有効化
<a name="enable-snapshot-retention"></a>

 AWS Glue コンソール、AWS CLI、または AWS API を使用して、データカタログ内の Apache Iceberg テーブルのスナップショット保持オプティマイザーを有効にすることができます。新しいテーブルの場合は、テーブル形式として Apache Iceberg を選択し、テーブルの作成時にスナップショット保持オプティマイザーを有効にすることができます。新しいテーブルでは、スナップショットの保持はデフォルトで無効になっています。

------
#### [ Console ]

**スナップショット保持オプティマイザーを有効にするには**

1.  [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソールを開き、データレイク管理者、テーブル作成者、またはテーブルに対する `glue:UpdateTable` および `lakeformation:GetDataAccess` の許可を付与されたユーザーとしてサインインします。

1. ナビゲーションペインの **[データカタログ]** で **[テーブル]** を選択します。

1. **[テーブル]** ページで、スナップショット保持オプティマイザーを有効にする Iceberg テーブルを選択してから、**[アクション]** メニューで、**[最適化]** の **[有効化]** を選択します。

   テーブルを選択して **[テーブルの詳細]** ページを開いて、最適化を有効にすることもできます。ページの下部にある **[テーブル最適化]** タブを選択し、**[スナップショットの保持を有効にする]** を選択します。

1. **[最適化を有効にする]** ページの **[最適化設定]** には、**[デフォルト設定の使用]** と **[設定のカスタマイズ]** の 2 つのオプションがあります。デフォルト設定を使用する場合、AWS Glue は Iceberg テーブル設定で定義されたプロパティを使用して、スナップショットの保持期間と保持するスナップショットの数を決定します。この設定がない場合、AWS Glue は 1 つのスナップショットを 5 日間保持し、期限切れのスナップショットに関連付けられたファイルを削除します。

1.  次に、オプティマイザーを実行するためにお客様に代わって AWS Glue が引き受けることのできる IAM ロールを選択します。IAM ロールに必要なアクセス許可の詳細については、「[テーブル最適化の前提条件](optimization-prerequisites.md)」セクションを参照してください。

   以下の手順に従って、既存の IAM ロールを更新します。

   1.  IAM ロールの許可ポリシーを更新するには、IAM コンソールで、圧縮の実行に使用されている IAM ロールにアクセスします。

   1.  [アクセス許可の追加] セクションで、[ポリシーの作成] を選択します。新しく開いたブラウザウィンドウで、ロールで使用する新しいポリシーを作成します。

   1. [Create policy] (ポリシーの作成) ページで、[JSON] タブを選択します。前提条件に示している JSON コードをポリシーエディタフィールドにコピーします。

1. **[スナップショット保持設定]** の値を手動で設定する場合は、**[設定のカスタマイズ]** を選択します。  
![\[[保持を有効にする] > [設定のカスタマイズ] オプションでの Apache Iceberg テーブルの詳細ページ。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/table-enable-retention.png)

1. **[選択した IAM ロールを選択したオプティマイザーに適用]** オプションのボックスを選択して、すべてのオプティマイザーを有効にするために単一の IAM ロールを使用します。

1. Iceberg テーブルオプティマイザーが、特定の仮想プライベートクラウド (VPC) から Amazon S3 バケットにアクセスする必要があるセキュリティポリシー設定がある場合は、AWS Glue ネットワーク接続を作成するか、既存のバケットを使用します。

   AWS Glue VPC 接続をまだ設定していない場合は、AWS Glue コンソールまたは AWS CLI/SDK を使用して[コネクタ用の接続を作成する](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html)セクションの手順に従って、新しい接続を作成します。

1. 次に、**[スナップショット保持設定]** で、[[Iceberg テーブル設定]](https://iceberg.apache.org/docs/1.5.2/configuration/#table-behavior-properties) で指定された値を使用するか、スナップショット保持期間 (history.expire.max-snapshot-age-ms) と保持するスナップショットの最小数 (history.expire.min-snapshots-to-keep) のカスタム値を連続するスナップショット削除ジョブが実行する間に指定します。

1.  **[関連するファイルを削除]** を選択して、テーブルオプティマイザーがテーブルメタデータから古いスナップショットを削除するときに、基盤となるファイルを削除します。

    このオプションを選択しない場合、古いスナップショットがテーブルメタデータから削除されたときに、関連するファイルが孤立ファイルとしてストレージに残ります。

1. 次に、注意書きを読み、**[同意します]** を選択して続行します。
**注記**  
 データカタログでは、スナップショット保持オプティマイザーにより、ブランチおよびタグレベルの保持ポリシーによって制御されるライフサイクルが尊重されます。詳細については、Iceberg のドキュメントの「[Branching and tagging](https://iceberg.apache.org/docs/latest/branching/#overview)」セクションを参照してください。

1. 設定を確認し、**[最適化を有効にする]** を選択します。

   保持オプティマイザーが実行され、設定に基づいて古いスナップショットの有効期限が切れるまで数分待ちます。

------
#### [ AWS CLI ]

 AWS Glue で新しい Iceberg テーブルのスナップショット保持を有効にするには、タイプが `retention` のテーブルオプティマイザーを作成し、`table-optimizer-configuration` の `enabled` フィールドを `true` に設定する必要があります。これを行うには、AWS CLI コマンドの `create-table-optimizer` または `update-table-optimizer` を使用します。さらに、要件に基づいて、`snapshotRetentionPeriodInDays` や `numberOfSnapshotsToRetain` などの保持設定フィールドを指定する必要があります。

次の例は、スナップショット保持オプティマイザーを有効にする方法を示しています。アカウント ID を有効な AWS アカウント ID に置き換えます。データベース名とテーブル名を実際の Iceberg テーブル名とデータベース名に置き換えます。`roleArn` を、スナップショット保持オプティマイザーの実行に必要なアクセス許可を持つ IAM ロールの AWS リソースネーム (ARN) と IAM ロールの名前に置き換えます。

```
aws glue create-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":'true', "vpcConfiguration":{
"glueConnectionName":"glue_connection_name"}, "retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":7,"numberOfSnapshotsToRetain":3,"cleanExpiredFiles":'true'}}}'\
  --type retention
```

 このコマンドは、指定されたカタログ、データベース、およびリージョンの、指定された Iceberg テーブルの保持オプティマイザーを作成します。table-optimizer-configuration では、使用する IAM ロール ARN を指定し、オプティマイザーを有効にして、保持設定を設定します。この例では、スナップショットを 7 日間保持し、少なくとも 3 つのスナップショットを保持し、期限切れのファイルをクリーンアップします。
+  snapshotRetentionPeriodInDays – 期限切れになるまでのスナップショットを保持する日数。デフォルト値は `5` です。
+ numberOfSnapshotsToRetain – 保持期間より古い場合でも保持するスナップショットの最小数。デフォルト値は `1` です。
+ cleanExpiredFiles – スナップショットの有効期限が切れた後に、期限切れのデータファイルを削除するかどうかを示すブール値。デフォルト値は `true` です。

   true に設定した場合、古いスナップショットがテーブルメタデータから削除されると、基盤となるファイルが削除されます。このパラメータを false に設定した場合、古いスナップショットがテーブルメタデータから削除されても、基盤となるファイルは孤立ファイルとしてストレージに残ります。

------
#### [ AWS API ]

[CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) オペレーションを呼び出して、テーブルのスナップショット保持オプティマイザーを有効にします。

------

圧縮を有効にすると、**[テーブル最適化]** タブに以下の圧縮の詳細が表示されます (約 15～20 分後)。

開始時刻  
スナップショット保持オプティマイザーが開始された時刻。値は UTC 時間のタイムスタンプです。

実行時間  
この時間は、オプティマイザーがタスクを完了するためにかかる時間を示します。値は UTC 時間のタイムスタンプです。

ステータス  
オプティマイザーの実行のステータス。値は成功または失敗です。

削除されたデータファイル  
削除されたファイルの合計数。

削除されたマニフェストファイル  
削除されたマニフェストファイルの合計数。

削除されたマニフェストリスト  
削除されたマニフェストリストの合計数。

# スナップショット保持オプティマイザーの更新
<a name="update-snapshot-retention"></a>

 AWS Glue コンソール、AWS CLI、または UpdateTableOptimizer API を使用して、特定の Apache Iceberg テーブルに対するスナップショット保持オプティマイザーの既存の設定を更新できます。

------
#### [ Console ]

**スナップショット保持設定を更新するには**

1. AWS マネジメントコンソールにサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. **[データカタログ]**、**[テーブル]** の順に選択します。Iceberg テーブルリストから、スナップショット保持オプティマイザー設定を更新するテーブルを選択します。

1. **[テーブルの詳細]** ページの下部セクションで、**[テーブルの最適化]** タブを選択し、**[編集]** を選択します。ページの右上隅にある **[アクション]**メニューから、**[最適化]** で **[編集]** を選択することもできます。

1.  **[最適化の編集]** ページで、必要な変更を加えます。

1.  **[保存]** を選択します。

------
#### [ AWS CLI ]

 AWS CLI を使用してスナップショット保持オプティマイザーを更新するときは、次のコマンドを使用できます。

```
aws glue update-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role"","enabled":'true', "vpcConfiguration":{"glueConnectionName":"glue_connection_name"},"retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":7,"numberOfSnapshotsToRetain":3,"cleanExpiredFiles":'true'}}}' \
 --type retention
```

 このコマンドは、指定されたカタログ、データベース、およびリージョンの、指定されたテーブルの保持設定を更新します。キーパラメータは次のとおりです。
+  snapshotRetentionPeriodInDays – 期限切れになるまでのスナップショットを保持する日数。デフォルト値は `1` です。
+ numberOfSnapshotsToRetain – 保持期間より古い場合でも保持するスナップショットの最小数。デフォルト値は `5` です。
+ cleanExpiredFiles – スナップショットの有効期限が切れた後に、期限切れのデータファイルを削除するかどうかを示すブール値。デフォルト値は `true` です。

   true に設定した場合、古いスナップショットがテーブルメタデータから削除されると、基盤となるファイルが削除されます。このパラメータを false に設定した場合、古いスナップショットがテーブルメタデータから削除されても、基盤となるファイルは孤立ファイルとしてストレージに残ります。

------
#### [ API ]

テーブルオプティマイザーを更新するときは、`UpdateTableOptimizer` API を使用できます。この API を使用すると、圧縮、保持、または孤立ファイル削除のために既存のテーブルオプティマイザーの設定を更新できます。リクエストパラメータには以下が含まれます。
+ catalogId (必須): テーブルを含むカタログの ID 
+  databaseName (オプション): テーブルを含むデータベースの名前 
+  tableName (オプション): テーブルの名前 
+  type (必須): テーブルオプティマイザーのタイプ (compaction、retention、または orphan\$1file\$1deletion) 
+  retentionConfiguration (必須): ロールの ARN、有効ステータス、保持設定、孤立ファイル削除設定など、テーブルオプティマイザーの更新された設定。

------

# スナップショット保持オプティマイザーの無効化
<a name="disable-snapshot-retention"></a>

 AWS Glue コンソールまたは AWS CLI を使用して、特定の Apache Iceberg テーブルのスナップショット保持オプティマイザーを無効にすることができます。

------
#### [ Console ]

**スナップショットの保持を無効にするには**

1. AWS マネジメントコンソールにサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. **[データカタログ]**、**[テーブル]** の順に選択します。テーブルリストから、スナップショットの保持用のオプティマイザーを無効にする Iceberg テーブルを選択します。

1. **[テーブルの詳細]** ページの下部で、**[アクション]** の下にある **[スナップショットの保持]**、**[テーブルの最適化]**、**[無効にする]** を選択します。

   ページの右上隅にある **[アクション]** メニューから、**[最適化]** で **[無効にする]** を選択することもできます。

1.  確認メッセージで **[無効化]** を選択します。スナップショット保持オプティマイザーは後から再度有効にできます。

    確認後、スナップショット保持オプティマイザーが無効になり、スナップショット保持のステータスが `Not enabled` に戻ります。

------
#### [ AWS CLI ]

次の例で、アカウント ID を、有効な AWS アカウント ID に置き換えます。データベース名とテーブル名を、実際の Iceberg テーブル名とデータベース名に置き換えます。`roleArn` を、保持オプティマイザーの実行に必要なアクセス許可を持つ IAM ロールの AWS リソースネーム (ARN) と IAM ロールの実際の名前に置き換えます。

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "vpcConfiguration":{"glueConnectionName":"glue_connection_name"}, "enabled":'false'}'\ 
  --type retention
```

------
#### [ AWS API ]

[UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) オペレーションを呼び出して、特定のテーブルのスナップショット保持オプティマイザーを無効にします。

------