

# トランザクションテーブルへのデータ入力と管理
<a name="populate-otf"></a>

[Apache Iceberg](https://iceberg.apache.org/)、[Apache Hudi](https://hudi.incubator.apache.org/)、および Linux Foundation [Delta Lake](https://delta.io/) は、Apache Spark で大規模なデータ分析とデータレイクワークロードを処理するために設計されたオープンソースのテーブル形式です。

次の方法を使用して、AWS Glue Data Catalog で Iceberg、Hudi、および Delta Lake の各テーブルにデータを入力できます。
+ AWS Glue クローラー – AWS Glue クローラー は、Iceberg、Hudi、Delta Lake のテーブルメタデータを自動的に検出してデータカタログに入力できます。詳細については、「[クローラーを使用したデータカタログへの入力](add-crawler.md)」を参照してください。
+ AWS Glue ETL ジョブ – ETL ジョブを作成して Iceberg、Hudi、Delta Lake の各テーブルにデータを書き込み、そのメタデータをデータカタログに入力できます。詳細については、「[AWS Glue ETL ジョブでのデータレイクフレームワークの使用](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-datalake-native-frameworks.html)」を参照してください。
+ AWS Glue コンソール、AWS Lake Formationコンソール、AWS CLI または API – AWS Glue コンソール、Lake Formation コンソール、または API を使用して、データカタログに Iceberg テーブル定義を作成し、管理できます。

**Topics**
+ [Apache Iceberg テーブルの作成](#creating-iceberg-tables)
+ [Iceberg テーブルの最適化](table-optimizers.md)
+ [Iceberg テーブルのクエリパフォーマンスの最適化](iceberg-column-statistics.md)

## Apache Iceberg テーブルの作成
<a name="creating-iceberg-tables"></a>

Amazon S3 に格納されたデータにより、AWS Glue Data Catalog で Apache Parquet データ形式を使用する Apache Iceberg テーブルを作成できます。Data Catalog のテーブルは、データストア内のデータを表すメタデータ定義です。デフォルトでは、AWS Glue は Iceberg v2 テーブルを作成します。v1 テーブルと v2 テーブルの違いについては、Apache Iceberg ドキュメントの「[形式バージョンの変更](https://iceberg.apache.org/spec/#appendix-e-format-version-changes)」を参照してください。

 [Apache Iceberg](https://iceberg.apache.org/) は、非常に大規模な分析データセット用のオープンテーブル形式です。Iceberg では、スキーマの変更 (スキーマ進化とも呼ばれます) を簡単に行うことができます。つまり、基になるデータを中断することなく、データテーブルの列を追加、名前変更、または削除できます。Iceberg はデータのバージョニングもサポートしているため、データの変更を経時的に追跡できます。これにより、タイムトラベル機能が有効になるため、過去のバージョンのデータにアクセスしてクエリを実行し、更新と削除の間に行われたデータの変更を分析できます。

AWS Glue または Lake Formation コンソールあるいは AWS Glue API の `CreateTable` オペレーションを使用して、データカタログに Iceberg テーブルを作成することができます。詳細については、「[CreateTable アクション (Python: create\$1table)](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-CreateTable)」を参照してください。

Data Catalog に Iceberg テーブルを作成する場合、読み取りと書き込みを実行できるように、Amazon S3 でテーブル形式とメタデータファイルのパスを指定する必要があります。

 Amazon S3 のデータロケーションを AWS Lake Formation に登録すると、Lake Formation を使用してきめ細かなアクセス制御の許可により Iceberg テーブルを保護できます。Amazon S3 のソースデータと、Lake Formation に登録されていないメタデータへのアクセスは、Amazon S3 および AWS Glue アクションの IAM アクセス許可ポリシーによって決定されます。詳細については、「[アクセス許可の管理](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html)」を参照してください。

**注記**  
Data Catalog は、パーティションの作成と Iceberg テーブルプロパティの追加をサポートしていません。

### 前提条件
<a name="iceberg-prerequisites"></a>

 Data Catalog に Iceberg テーブルを作成し、Lake Formation のデータアクセス許可を設定するには、次の要件を満たす必要があります。

1. 

**Lake Formation にデータが登録されていない状態で Iceberg テーブルを作成するために必要なアクセス許可。**

   Data Catalog にテーブルを作成するために必要なアクセス許可に加えて、テーブル作成者には次のアクセス許可が必要です。
   + リソース arn:aws:s3:::\$1bucketName\$1 での `s3:PutObject`
   + リソース arn:aws:s3:::\$1bucketName\$1 での `s3:GetObject`
   + リソース arn:aws:s3:::\$1bucketName\$1 での `s3:DeleteObject`

1. 

**Lake Formation にデータが登録されている状態で Iceberg テーブルを作成するために必要なアクセス許可:**

   Lake Formation を使用してデータレイク内のデータを管理および保護するには、テーブルのデータを含む Amazon S3 ロケーションを Lake Formation に登録します。これは、Lake Formation が Athena、Redshift Spectrum、Amazon EMR などの AWS 分析サービスに認証情報を提供して、データにアクセスできるようにするためです。Amazon S3 ロケーションの登録の詳細については、「[データレイクへの Amazon S3 ロケーションの追加](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)」を参照してください。

   Lake Formation に登録されている、基盤となるデータを読み書きするプリンシパルには、次のアクセス許可が必要です。
   + `lakeformation:GetDataAccess`
   + `DATA_LOCATION_ACCESS`

     ロケーションに対するデータロケーション許可を持つプリンシパルは、すべての子ロケーションに対するロケーション許可も持っています。

     データロケーション許可の詳細については、「[基盤となるデータのアクセスコントロール](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html#data-location-permissions)」を参照してください。

 圧縮を有効にするには、Data Catalog 内のテーブルを更新するアクセス許可を持つ IAM ロールを、サービスが引き受ける必要があります。詳細については、「[テーブル最適化の前提条件](optimization-prerequisites.md)」を参照してください。

### Iceberg テーブルの作成
<a name="create-iceberg-table"></a>

このページに記載されているように、AWS Glue または Lake Formation コンソールあるいは AWS Command Line Interface を使用して Iceberg v1 および v2 テーブルを作成できます。AWS Glue クローラー を使用して Iceberg テーブルを作成することもできます。詳細については、「AWS Glue デベロッパーガイド」の「[Data Catalog とクローラー](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html)」を参照してください。

**Iceberg テーブルを作成するには**

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

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

1. Data Catalog で **[テーブル]** を選択し、**[テーブルの作成]** ボタンを使用して次の属性を指定します。
   + **テーブル名** - テーブルの名前を入力します。Athena を使用してテーブルにアクセスする場合は、「Amazon Athena ユーザーガイド」の[命名に関するヒント](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html)を使用します。
   + **データベース** - 既存のデータベースを選択するか、新しいデータベースを作成します。
   + **説明** - テーブルの説明。テーブルの内容を理解しやすくするために説明を記入できます。
   + **テーブル形式** - **[テーブル形式]** として、[Apache Iceberg] を選択します。
   + **圧縮を有効にする** - **[圧縮を有効にする]** を選択すると、テーブル内の小さな Amazon S3 オブジェクトが圧縮されてより大きなオブジェクトにまとめられます。
   + **IAM ロール**:- 圧縮を実行する場合、サービスはユーザーに代わって IAM ロールを引き受けます。IAM ロールは、ドロップダウンを使用して選択できます。圧縮を有効にするために必要なアクセス許可がロールにあることを確認します。

     必要なアクセス許可の詳細については、「[テーブル最適化の前提条件](optimization-prerequisites.md)」を参照してください。
   + **ロケーション** - メタデータテーブルを保存する Amazon S3 内のフォルダへのパスを指定します。Iceberg が読み取りと書き込みを実行するには、メタデータファイルと Data Catalog 内のロケーションが必要です。
   + **スキーマ** - **[列の追加]** を選択して、列と、列のデータ型を追加します。空のテーブルを作成して、後でスキーマを更新することもできます。Data Catalog は Hive データ型をサポートしています。詳細については、「[Hive データ型](https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=27838462#content/view/27838462)」を参照してください。

      Iceberg では、テーブルを作成した後でスキーマとパーティションを進化させることができます。[[Athena クエリ]](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-evolving-table-schema.html) を使用してテーブルスキーマを更新し、[[Spark クエリ]](https://iceberg.apache.org/docs/latest/spark-ddl/#alter-table-sql-extensions) を使用してパーティションを更新できます。

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

```
aws glue create-table \
    --database-name iceberg-db \
    --region us-west-2 \
    --open-table-format-input '{
      "IcebergInput": { 
           "MetadataOperation": "CREATE",
           "Version": "2"
         }
      }' \
    --table-input '{"Name":"test-iceberg-input-demo",
            "TableType": "EXTERNAL_TABLE",
            "StorageDescriptor":{ 
               "Columns":[ 
                   {"Name":"col1", "Type":"int"}, 
                   {"Name":"col2", "Type":"int"}, 
                   {"Name":"col3", "Type":"string"}
                ], 
               "Location":"s3://DOC_EXAMPLE_BUCKET_ICEBERG/"
            }
        }'
```

------

**Topics**
+ [前提条件](#iceberg-prerequisites)
+ [Iceberg テーブルの作成](#create-iceberg-table)

# Iceberg テーブルの最適化
<a name="table-optimizers"></a>

AWS Glue は、AWS 分析エンジンと ETL ジョブで使用される Apache Iceberg テーブルの管理とパフォーマンスを強化するための複数のテーブル最適化オプションをサポートしています。これらのオプティマイザーは、効率的なストレージの使用量、クエリパフォーマンスの向上、効率的なデータ管理を実現します。AWS Glue では、次の 3 種類のテーブルオプティマイザーを使用できます。
+ **圧縮 **— データ圧縮では小さなデータファイルを圧縮して、ストレージの使用量を減らし、読み取りパフォーマンスを向上させます。古いデータを削除して、フラグメント化されたデータをより大規模で効率的なファイルに統合するために、データファイルはマージされ、書き換えられます。圧縮を自動的に実行するように設定できます。

  Binpack は Apache Iceberg のデフォルト圧縮戦略です。より小さなデータファイルをより大きなデータファイルに結合し、最適なパフォーマンスを実現します。圧縮は、同様のデータをクラスター化する Sort 戦略と Z-order 戦略もサポートしています。Sort は、指定された列に基づいてデータを整理し、フィルタリングされた操作のクエリパフォーマンスを向上させます。Z-order は、複数の列を同時にクエリするときにクエリパフォーマンスを向上させるソートされたデータセットを作成します。binpack、sort、Z-order の 3 つの圧縮戦略はすべて、クエリエンジンによってスキャンされるデータ量を減らし、クエリ処理コストを削減します。
+ **スナップショット保持** - スナップショットは、Iceberg テーブルのタイムスタンプ付きバージョンです。スナップショット保持設定を使用すると、スナップショットを保持する期間と保持するスナップショットの数を強制できます。スナップショット保持オプティマイザーを設定すると、古い不要なスナップショットと、その基になる関連付けられたファイルを削除して、ストレージのオーバーヘッドを管理できます。
+ **孤立ファイルの削除** — 孤立ファイルは、Iceberg テーブルメタデータによって参照されなくなったファイルです。これらのファイルは、特にテーブルの削除や ETL ジョブの失敗などのオペレーションの後、時間の経過と共に蓄積される可能性があります。孤立ファイルの削除を有効にすると、AWS Glue はこれらの不要なファイルを定期的に特定して削除できるため、ストレージが解放されます。

カタログレベルの最適化設定は、Lake Formation コンソールと AWS Glue `UpdateCatalog` API 操作を介して使用できます。圧縮、スナップショット保持、孤立ファイル削除の各オプティマイザーは、AWS Glue コンソール、AWS CLI、または AWS Glue API オペレーションを使用して、データカタログ内の個々の Iceberg テーブルに対して有効または無効にすることができます。

 次の動画は、データカタログで Iceberg テーブルのオプティマイザを設定する方法を示しています。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/xOXE7AS-pNA?si=lKvt_TSlPkoc6OXn/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/xOXE7AS-pNA?si=lKvt_TSlPkoc6OXn)


**Topics**
+ [テーブル最適化の前提条件](optimization-prerequisites.md)
+ [カタログレベルのテーブルオプティマイザー](catalog-level-optimizers.md)
+ [圧縮の最適化](compaction-management.md)
+ [スナップショット保持の最適化](snapshot-retention-management.md)
+ [孤立ファイルの削除](orphan-file-deletion.md)
+ [最適化の詳細の表示](view-optimization-status.md)
+ [Amazon CloudWatch メトリクスの表示](view-optimization-metrics.md)
+ [オプティマイザーの削除](delete-optimizer.md)
+ [考慮事項と制限事項](optimizer-notes.md)
+ [テーブルオプティマイザーがサポートされているリージョン](regions-optimizers.md)

# テーブル最適化の前提条件
<a name="optimization-prerequisites"></a>

テーブルオプティマイザーは、テーブルの最適化オプション (圧縮、スナップショット保持、孤立ファイル削除) を有効にする際に指定する AWS Identity and Access Management (IAM) ロールの許可を引き受けます。すべてのオプティマイザーに対して単一のロールを作成することも、オプティマイザーごとに個別のロールを作成することもできます。

**注記**  
孤立ファイル削除オプティマイザには、`glue:updateTable` または `s3:putObject` アクセス許可は必要ありません。スナップショットの有効期限と圧縮オプティマイザには、同じアクセス許可セットが必要です。

IAM ロールには、データカタログ内のデータを読み取ったり、メタデータを更新したりするための許可が必要です。IAM ロールを作成し、次のインラインポリシーをアタッチできます。
+ AWS Lake Formation に登録されていないデータの場所に対する Amazon S3 の読み取り/書き込み許可を付与する次のインラインポリシーを追加します。このポリシーには、データカタログ内のテーブルを更新するための許可、および AWS Glue が Amazon CloudWatch ログにログを追加したり、メトリクスを公開したりするのを許可するための許可も含まれています。Lake Formation に登録されていない Amazon S3 のソースデータへのアクセスは、Amazon S3 および AWS Glue アクションの IAM アクセス許可ポリシーによって決定されます。

  次のインラインポリシーでは、`bucket-name` を Amazon S3 バケット名、`aws-account-id` および `region` をデータカタログの有効な AWS アカウント番号およびリージョン、`database_name` をデータベース名、`table_name` をテーブル名に置き換えます。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket/*"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "glue:UpdateTable",
                  "glue:GetTable"
              ],
              "Resource": [
                  "arn:aws:glue:us-east-1:111122223333:table/<database-name>/<table-name>",
                  "arn:aws:glue:us-east-1:111122223333:database/<database-name>",
                  "arn:aws:glue:us-east-1:111122223333:catalog"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
              ],
              "Resource": [
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-compaction/logs:*",
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-retention/logs:*",
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
              ]
          }
      ]
  }
  ```

------
+ 次のポリシーを使用して、Lake Formation に登録されたデータの圧縮を有効にします。

  テーブルに対する `IAM_ALLOWED_PRINCIPALS` グループアクセス許可が最適化ロールに付与されていない場合、ロールにはテーブルに対する Lake Formation の `ALTER`、`DESCRIBE`、`INSERT`、および `DELETE` アクセス許可が必要です。

  Lake Formation に Amazon S3 バケットを登録する方法の詳細については、「[データレイクへの Amazon S3 ロケーションの追加](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)」を参照してください。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lakeformation:GetDataAccess"
        ],
        "Resource": "*"
      },
      {
        "Effect": "Allow",
        "Action": [
          "glue:UpdateTable",
          "glue:GetTable"
        ],
        "Resource": [
          "arn:aws:glue:us-east-1:111122223333:table/databaseName/tableName",
          "arn:aws:glue:us-east-1:111122223333:database/databaseName",
          "arn:aws:glue:us-east-1:111122223333:catalog"
        ]
      },
      {
        "Effect": "Allow",
        "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
        ],
        "Resource": [
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-compaction/logs:*",
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-retention/logs:*",
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
        ]
      }
    ]
  }
  ```

------
+ (オプション) [サーバー側の暗号化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)を使用して暗号化された Amazon S3 バケットにデータがある Iceberg テーブルを最適化するには、圧縮ロールに Amazon S3 オブジェクトを復号して、暗号化されたバケットにオブジェクトを書き込むための新しいデータキーを生成するアクセス許可が必要です。次のポリシーを目的の AWS KMS キーに追加します。バケットレベルの暗号化のみがサポートされています。

  ```
  {
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::<aws-account-id>:role/<optimizer-role-name>"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "*"
  }
  ```
+  (オプション) Lake Formation で登録されたデータの場所については、場所を登録するために使用されるロールには、Amazon S3 オブジェクトを復号したり、暗号化されたバケットにオブジェクトを書き込むための新しいデータキーを生成したりする許可が必要です。詳細については、「[暗号化された Amazon S3 の場所の登録](https://docs.aws.amazon.com/lake-formation/latest/dg/register-encrypted.html)」を参照してください。
+ (オプション) AWS KMS キーが別の AWS アカウントに保存されている場合は、圧縮ロールに次のアクセス許可を含める必要があります。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
        ],
        "Resource": [
          "arn:aws:kms:us-east-1:111122223333:key/key-id"
        ]
      }
    ]
  }
  ```

------
+  圧縮を実行するために使用するロールには、そのロールに対する `iam:PassRole` アクセス許可が必要です。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iam:PassRole"
        ],
        "Resource": [
          "arn:aws:iam::111122223333:role/<optimizer-role-name>"
        ]
      }
    ]
  }
  ```

------
+ 圧縮プロセスを実行する IAM ロールを引き受けるには、次の信頼ポリシーを AWS Glue サービスのロールに追加します。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
          "Service": "glue.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  ```

------
+ <a name="catalog-optimizer-requirement"></a> (オプション) データカタログの設定を更新してカタログレベルのテーブル最適化を有効にするには、使用する IAM ロールに、ルートカタログに対する `glue:UpdateCatalog` アクセス許可または AWS Lake Formation `ALTER CATALOG` アクセス許可が必要になります。カタログのプロパティは、`GetCatalog` API を使用して確認できます。

# カタログレベルのテーブルオプティマイザー
<a name="catalog-level-optimizers"></a>

1 回限りのカタログ設定では、AWS Glue Data Catalog にあるすべての新規および更新された Apache Iceberg テーブルに対して、圧縮、スナップショット保持、孤立ファイル削除などの自動オプティマイザーを設定できます。カタログレベルのオプティマイザー設定を使用すると、カタログ内のすべてのテーブルに一貫したオプティマイザー設定を適用できるため、テーブルごとにオプティマイザーを個別に設定する必要がなくなります。

データレイクの管理者は、Lake Formation コンソールでデフォルトのカタログを選択し、`Table optimization` オプションを使用してオプティマイザーを有効にすることで、統計の生成を設定できます。Data Catalog で新しいテーブルを作成したり、既存のテーブルを更新したりすると、Data Catalog はテーブルの最適化を自動的に実行して運用上の負担を軽減します。

テーブルレベルで最適化を設定した場合、またはテーブルのテーブル最適化設定を以前に削除した場合、それらのテーブル固有の設定は、テーブル最適化のデフォルトのカタログ設定よりも優先されます。設定パラメータがテーブルレベルまたはカタログレベルで定義されていない場合、Iceberg テーブルプロパティ値が適用されます。この設定は、スナップショットの保持および孤立ファイルの削除オプティマイザーに適用されます。

カタログレベルのオプティマイザーを有効にするときは、次の点を考慮してください。
+ カタログの作成時に最適化設定を行い、その後 Update Catalog リクエストを通じて最適化を無効にすると、オペレーションはカタログ内のすべてのテーブルにカスケードします。
+ 特定のテーブルにオプティマイザーを既に設定している場合、カタログレベルで無効化オペレーションを行ってもこのテーブルには影響しません。
+ カタログレベルでオプティマイザーを無効にすると、既存のオプティマイザー設定を持つテーブルは特定の設定を維持し、カタログレベルの変更の影響を受けません。ただし、独自のオプティマイザー設定がないテーブルは、カタログレベルから無効状態を継承します。
+ スナップショット保持オプティマイザーと孤立ファイル削除オプティマイザーはスケジュールベースであるため、更新によりスケジュールの開始がランダムに遅延します。これにより、各オプティマイザーがわずかに異なる時間に開始され、負荷が分散されるため、サービス制限を超える可能性が低くなります。
+ AWS Glue Data Catalog 暗号化が有効になっている場合、カタログレベルのオプティマイザ設定はテーブルによって自動的に継承されません。カタログでメタデータ暗号化が有効になっている場合は、テーブルオプティマイザをテーブルごとに個別に設定する必要があります。カタログレベルのオプティマイザ継承を使用するには、カタログでメタデータ暗号化を無効にする必要があります。

**Topics**
+ [カタログレベルの自動テーブル最適化の有効化](enable-auto-table-optimizers.md)
+ [カタログレベルの最適化の表示](view-catalog-optimizations.md)
+ [カタログレベルのテーブル最適化の無効化](disable-auto-table-optimizers.md)

# カタログレベルの自動テーブル最適化の有効化
<a name="enable-auto-table-optimizers"></a>

 データカタログ内のすべての新しい Apache Iceberg テーブルの自動テーブル最適化を有効にできます。テーブルを作成すると、テーブル最適化の設定を手動で明示的に更新することもできます。

 データカタログの設定を更新してカタログレベルのテーブル最適化を有効にするには、使用する IAM ロールに、ルートカタログに対する `glue:UpdateCatalog` アクセス許可が必要になります。カタログのプロパティは、`GetCatalog` API を使用して確認できます。

 Lake Formation マネージドテーブルの場合、カタログ最適化設定中に選択した IAM ロールには、新しいテーブルまたは更新されたテーブルに対する Lake Formation `ALTER`、`DESCRIBE`、`INSERT`、および `DELETE` のアクセス許可が必要です。

## カタログレベルのオプティマイザーを有効にするには (コンソール)
<a name="enable-catalog-optimizers-console"></a>

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

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

1. **[カタログ]** タブを選択します。

1. アカウントレベルのカタログを選択します。

1. **[テーブルの最適化]** タブで、**[テーブルの最適化]**、**[編集]** を選択します。また、**[アクション]** で **[最適化を編集]** を選択することもできます。  
![\[このスクリーンショットは、カタログレベルで最適化を有効にする編集オプションを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/catalog-edit-optimizations.png)

1. **[テーブルの最適化]** ページで、次のオプションを設定します。  
![\[このスクリーンショットは、カタログレベルの最適化オプションを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/catalog-optimization-options.png)

   1. **[圧縮]** 設定を構成する:
      + 圧縮を有効または無効にします。
      + オプティマイザーを実行するために必要なアクセス許可を持つ IAM ロールを選択します。

        IAM ロールに必須のアクセス許可の詳細については、「[テーブル最適化の前提条件](optimization-prerequisites.md)」を参照してください。

   1. **[スナップショットの保持]** 設定を構成する：
      + 保持を有効または無効にします。
      + スナップショットの保持期間を日単位で設定します。デフォルトは 5 日です。
      + 保持するスナップショットの数を設定します。デフォルトはスナップショット 1 個です。
      + 期限切れファイルのクリーニングを有効または無効にします。

   1. **[孤立ファイルの削除]** 設定を構成する：
      + 孤立ファイルの削除を有効または無効にします。
      + 孤立ファイルの保持期間を日単位で設定します。デフォルトは 3 日です。

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

## AWS CLI によるカタログレベルのオプティマイザーの有効化
<a name="catalog-auto-optimizers-cli"></a>

次の CLI コマンドを使用して、オプティマイザー設定で既存のカタログを更新します。

**Example オプティマイザー設定でカタログを更新する**  

```
aws glue update-catalog \
   --name catalog-id \
  --catalog-input \
  '{
    "CatalogId": "111122223333",
    "CatalogInput": {
        "CatalogProperties": {
            "CustomProperties": {
                "ColumnStatistics.Enabled": "false",
                "ColumnStatistics.RoleArn": "arn:aws:iam::111122223333:role/service-role/stats-role-name"
            },
            "IcebergOptimizationProperties": {
                "RoleArn": "arn:aws:iam::111122223333:role/optimizer-role-name",
                "Compaction": {
                    "enabled": "true"
                },
                "Retention": {
                    "enabled": "true",
                    "snapshotRetentionPeriodInDays": "10",
                    "numberOfSnapshotsToRetain": "5",
                    "cleanExpiredFiles": "true"
                },
                "OrphanFileDeletion": {
                    "enabled": "true",
                    "orphanFileRetentionPeriodInDays": "3"
                }
            }
        }
    }
}'
```

カタログレベルのオプティマイザーで問題が発生した場合は、以下を確認してください。
+ 前提条件セクションで説明されているように、IAM ロールに正しいアクセス許可が付与されていることを確認します。
+ オプティマイザーオペレーションに関連するエラーメッセージがないか CloudWatch ログを確認します。

   詳細については、「*Amazon CloudWatch ユーザーガイド*」の「[使用可能なメトリクスを表示する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)」を参照してください。
+ カタログ設定を確認して、カタログ設定が正常に適用されたことを確認します。
+ テーブルアクセスの失敗については、CloudWatch ログと EventBridge 通知で詳細なエラー情報を確認してください。

# カタログレベルの最適化の表示
<a name="view-catalog-optimizations"></a>

 カタログレベルのテーブル最適化が有効になっている場合、Apache Iceberg テーブルが、AWS マネジメントコンソール、SDK、AWS Glue クローラー のいずれかで `CreateTable` または `UpdateTable` API を介して作成または更新されるたびに、そのテーブルに対して同等のテーブルレベルの設定が作成されます。

 テーブルを作成または更新したら、テーブルの詳細を検証してテーブル最適化を確定できます。`Table optimization` では、`Configuration source` プロパティが `Catalog` に設定されているところを示しています。

![\[カタログレベルの最適化設定を持つ Apache Iceberg テーブルのイメージが適用されました。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/catalog-optimization-enabled.png)


# カタログレベルのテーブル最適化の無効化
<a name="disable-auto-table-optimizers"></a>

 AWS Lake Formation コンソールと `glue:UpdateCatalog` API を使用して、新しいテーブルのテーブル最適化を無効にすることができます。

**カタログレベルでテーブルの最適化を無効にするには**

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

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

1. **[カタログの概要]** ページの **[テーブルの最適化]** で **[編集]** を選択します。

1. **[最適化の編集]**ページで、**[最適化オプション]** の選択を解除します。

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

# 圧縮の最適化
<a name="compaction-management"></a>

 Apache Iceberg などのオープンテーブル形式を使用する Amazon S3 データレイクは、データを S3 オブジェクトとして保存します。データレイクテーブルに数千の小さな Amazon S3 オブジェクトがある場合、メタデータのオーバーヘッドが増加し、読み取りパフォーマンスに悪影響が及びます。AWS Glue Data Catalog は Iceberg テーブル用のマネージド圧縮を提供し、小さなオブジェクトを圧縮してより大きなオブジェクトにまとめ、Amazon Athena、Amazon EMR、AWS Glue ETL ジョブなどの AWS 分析サービスによる読み取りパフォーマンスを向上させます。データカタログは、同時クエリに支障をきたすことなく圧縮を実行し、Parquet 形式のテーブルに対してのみ圧縮をサポートしています。

テーブルオプティマイザは、テーブルパーティションを継続的にモニタリングして、ファイル数とファイルサイズがしきい値を超えたときに圧縮プロセスを開始します。

データカタログでは、テーブル、またはそのいずれかのパーティションに 100 個を超えるファイルがある場合、圧縮プロセスが開始されます。各ファイルは、ターゲットのファイルサイズの 75% 未満である必要があります。ターゲットファイルサイズは、`write.target-file-size-bytes` テーブルプロパティによって定義されます。明示的に設定されていない場合、このプロパティはデフォルトで 512 MB に設定されます。

 制限事項については、「[マネージドデータ圧縮でサポートされる形式と制限事項](optimizer-notes.md#compaction-notes)」を参照してください。

**Topics**
+ [圧縮オプティマイザの有効化](enable-compaction.md)
+ [圧縮オプティマイザの無効化](disable-compaction.md)

# 圧縮オプティマイザの有効化
<a name="enable-compaction"></a>

 AWS Glue コンソール、AWS CLI、または AWS API を使用して、AWS Glue データカタログ内の 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. **[最適化を有効にする]** ページで、**[テーブル最適化オプション]** の **[圧縮]** を選択します。  
![\[[圧縮を有効にする] オプションを示す Apache Iceberg の [テーブルの詳細] ページ。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/table-enable-compaction.png)

1. 次に、[テーブル最適化の前提条件](optimization-prerequisites.md) セクションに表示されたアクセス許可を持つ IAM ロールをドロップダウンから選択します。

   また、**[新しい IAM ロールを作成]** オプションを選択して、圧縮の実行に必要なアクセス許可を持つカスタムロールを作成することもできます。

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

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

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

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

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. 圧縮戦略を選択します。次のオプションを使用できます。
   + **Binpack** – Binpack は Apache Iceberg のデフォルト圧縮戦略です。より小さなデータファイルをより大きなデータファイルに結合し、最適なパフォーマンスを実現します。
   + **Sort** – Apache Iceberg でのソートは、指定された列に基づいてファイル内の情報をクラスター化するデータ整理手法であり、処理する必要があるファイルの数を減らすことでクエリのパフォーマンスを大幅に向上させます。ソート順序フィールドを使用して Iceberg のメタデータでソート順序を定義し、複数の列を指定すると、ソート順序で列が表示される順序でデータがソートされ、同様の値を持つレコードがファイル内にまとめて保存されます。ソート圧縮戦略では、パーティション内のすべてのファイル間でデータをソートすることで、最適化をさらに進めます。
   + **Z-order** – Z-order は、重要度が同じ複数の列でソートする必要がある場合にデータを整理する方法です。1 つの列を他の列よりも優先する従来のソートとは異なり、Z-order は各列にバランスの取れた重みを与えるため、データを検索するときにクエリエンジンが読み取るファイルが少なくなります。

     この手法は、異なる列の値の二進桁を組み合わせることによって機能します。例えば、2 つの列に数字 3 と 4 がある場合、Z-order は最初にそれらを二進数 (3 が 011 になり、4 が 100 になります) に変換し、これらの数字をインターリーブして新しい値 011010 を作成します。このインターリーブにより、関連するデータを物理的に近づけるパターンが作成されます。

     Z-order は、多次元クエリに特に効果的です。例えば、収入、州、郵便番号で Z-order に並べられた顧客テーブルは、複数のディメンションをまたいでクエリする場合の階層ソートと比較して、優れたパフォーマンスを実現できます。このように整理することで、収入と地理的位置の特定の組み合わせをターゲットとするクエリを使用して、不要なファイルスキャンを最小限に抑えながら、関連するデータをすばやく見つけることができます。

1. **最小入力ファイル **– 圧縮がトリガーされる前にパーティションで必要なデータファイルの数。

1. **削除ファイルのしきい値** – データファイルが圧縮対象になる前に、データファイルで必要な最小の削除操作。

1. **[最適化を有効にする]** を選択します。

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

 次の例は、圧縮を有効にする方法を示しています。アカウント ID を有効な AWS アカウント ID に置き換えます。データベース名とテーブル名を実際の Iceberg テーブル名とデータベース名に置き換えます。`roleArn` を、圧縮の実行に必要なアクセス許可を持つ IAM ロールの ARN (AWSリソースネーム) と IAM ロールの名前に置き換えます。圧縮戦略 `sort` は、`z-order` や `binpack` などサポートされている他の戦略に置き換えることができます。

要件に応じて順序を設定します。

```
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"},
    "compactionConfiguration": {
      "icebergConfiguration": {"strategy": "sort"}
    }
  }'\
--type compaction
```

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

[CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) オペレーションを呼び出して、テーブルの圧縮を有効にします。

------

圧縮を有効にすると、圧縮の実行が完了後、**[テーブルの最適化]** タブに次の圧縮の詳細が表示されます。

開始時間  
データカタログ内で圧縮プロセスが開始された時刻。値は UTC 時間のタイムスタンプです。

終了時刻  
Data Catalog で圧縮処理が終了した時刻。値は UTC 時間のタイムスタンプです。

ステータス  
圧縮実行のステータス。値は成功または失敗です。

圧縮ファイル数  
圧縮したファイルの総数。

圧縮バイト数  
圧縮したバイトの総数。

# 圧縮オプティマイザの無効化
<a name="disable-compaction"></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. 左のナビゲーションで、**[Data Catalog]** の **[テーブル]** を選択します。

1. テーブルリストから、圧縮を無効にする Iceberg テーブルを選択します。

1. **[テーブルの詳細]** ページの下部にある、**[テーブル最適化]** タブを選択します。

1. **[アクション]** から、**[無効にする]** を選択し、**[圧縮]** を選択します。

1.  確認メッセージで **[圧縮を無効にする]** を選択します。圧縮は後で再度有効にすることができます。

    確認すると、圧縮が無効になり、テーブルの圧縮ステータスが `Disabled` に戻ります。

------
#### [ 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", "enabled":'false', "vpcConfiguration":{"glueConnectionName":"glue_connection_name"}}'\ 
  --type compaction
```

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

[UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) オペレーションを呼び出して、特定のテーブルの圧縮を無効にします。

------

# スナップショット保持の最適化
<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) オペレーションを呼び出して、特定のテーブルのスナップショット保持オプティマイザーを無効にします。

------

# 孤立ファイルの削除
<a name="orphan-file-deletion"></a>

 AWS Glue Data Catalog では、Iceberg テーブルから孤立ファイルを削除できます。孤立ファイルとは、指定されたテーブルの場所の Amazon S3 データソースに存在し、Iceberg テーブルメタデータによって追跡されず、設定された経過時間制限よりも古い参照されていないファイルのことを指します。これらの孤立ファイルは、圧縮、パーティションの削除、テーブルの書き換えなどのオペレーションの障害により、時間の経過と共に蓄積され、不要なストレージスペースを占める可能性があります。

AWS Glue の孤立ファイル削除オプティマイザーは、テーブルメタデータと実際のデータファイルをスキャンして孤立ファイルを識別し、それらを削除してストレージ領域を再利用します。オプティマイザーは、オプティマイザーの作成日以降に作成された、設定された削除基準を満たすファイルのみを削除します。つまり、オプティマイザーの作成日より前に作成されたファイルは削除されません。

**孤立ファイルの削除ロジック**

1. 日付チェック – ファイル作成日をオプティマイザー作成日と比較します。ファイルがオプティマイザー作成日より古い場合、そのファイルはスキップされます。

1. オプティマイザー設定チェック – ファイルがオプティマイザー作成日より新しい場合、設定された経過期限に対してファイルを評価します。オプティマイザーは、削除基準に一致したファイルを削除します。基準と一致しない場合は、ファイルをスキップします。

 データカタログで孤立ファイル削除テーブルオプティマイザーを作成することで、孤立ファイルの削除を開始できます。

**重要**  
 デフォルトでは、孤立ファイルを削除すると、AWS Glue テーブルの場所全体のファイルを評価します。API パラメーターを使用することで、評価の範囲を制限するためにサブプレフィックスを設定できますが、テーブルの場所に他のデータソースやテーブルのファイルが含まれていないことを確認する必要があります。テーブルの場所が他のデータソースと重複している場合、関係のないファイルが孤立ファイルとして識別されて削除される可能性があります。

**Topics**
+ [孤立ファイルの削除の有効化](enable-orphan-file-deletion.md)
+ [孤立ファイル削除オプティマイザーの更新](update-orphan-file-deletion.md)
+ [孤立ファイルの削除の無効化](disable-orphan-file-deletion.md)

# 孤立ファイルの削除の有効化
<a name="enable-orphan-file-deletion"></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. **[最適化を有効にする]** ページで、**[最適化オプション]** の **[孤立ファイルの削除]** を選択します。

1. **[デフォルト設定]** を使用する場合、すべての孤立ファイルは 3 日後に削除されます。孤立ファイルを特定の日数保持する場合は、**[設定をカスタマイズ]** を選択します。

1. 次に、孤立ファイルを削除するために必要なアクセス許可を持つ 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. **[設定をカスタマイズ]** を選択した場合は、**[孤立ファイルの削除設定]** で、削除前にファイルを保持する日数を入力します。2 つの連続するオプティマイザーの実行時の間隔を指定することもできます。デフォルト値は 24 時間です。

1. **[最適化を有効にする]** を選択します。

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

 AWS Glue で Iceberg テーブルの孤立ファイルの削除を有効にするには、タイプが `orphan_file_deletion` のテーブルオプティマイザーを作成し、`enabled` フィールドを true に設定する必要があります。AWS CLI を使用して Iceberg テーブルの孤立ファイル削除オプティマイザーを作成するには、次のコマンドを使用します。

```
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"}, "orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":3, "location":'S3 location'}}}'\
 --type orphan_file_deletion
```

 このコマンドにより、指定した Iceberg テーブルの孤立ファイル削除オプティマイザーが作成されます。キーパラメータは次のとおりです。
+ roleArn – S3 バケットと Glue リソースへのアクセス許可を持つ IAM ロールの ARN。
+ enabled – オプティマイザーを有効にするには、true に設定します。
+ orphanFileRetentionPeriodInDays – 孤立ファイルが削除されるまでの保持日数 (最小で 1 日)。
+ type – 孤立ファイル削除オプティマイザーを作成するには、orphan\$1file\$1deletion に設定します。

 テーブルオプティマイザーを作成した後は、孤立ファイルの削除が定期的に (有効のままにした場合は 1 日に 1 回) 実行されます。`list-table-optimizer-runs` API を使用して実行を確認できます。孤立ファイルの削除ジョブでは、テーブルの Iceberg メタデータで追跡されていないファイルが識別されて削除されます。

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

[CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) オペレーションを呼び出して、特定のテーブルの孤立ファイル削除オプティマイザーを作成します。

------

# 孤立ファイル削除オプティマイザーの更新
<a name="update-orphan-file-deletion"></a>

 AWS Glue コンソール、AWS CLI、または `UpdateTableOptimizer` オペレーションを使用して、孤立ファイルの保持期間やオプティマイザーが使用する IAM ロールを変更するなど、孤立ファイル削除オプティマイザーの設定を変更できます。

------
#### [ AWS マネジメントコンソール ]

**孤立ファイル削除オプティマイザーを更新するには**

1.  **[データカタログ]**、**[テーブル]** の順に選択します。テーブルリストから、孤立ファイル削除オプティマイザー設定を更新するテーブルを選択します。

1. **[テーブルの詳細]** ページの下部セクションで、**[テーブルの最適化]**、**[編集]** を選択します。

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

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

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

 `update-table-optimizer` 呼び出しを使用して AWS Glue の孤立ファイル削除オプティマイザーを更新できます。呼び出しを使用できます。これにより、`icebergConfiguration` フィールドで `OrphanFileDeletionConfiguration` を変更して、更新後の `OrphanFileRetentionPeriodInDays` で孤立ファイルを保持する日数を設定し、孤立ファイルを削除する Iceberg テーブルの場所を指定できます。

```
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"},"orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":5}}}' \
 --type orphan_file_deletion
```

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

[UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) オペレーションを呼び出して、テーブルの孤立ファイルの削除オプティマイザーを更新します。

------

 

# 孤立ファイルの削除の無効化
<a name="disable-orphan-file-deletion"></a>

 AWS Glue コンソールまたは AWS CLI を使用して、特定の Apache Iceberg テーブルの孤立ファイル削除オプティマイザーを無効にすることができます。

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

**孤立ファイルの削除を無効にするには**

1. **[データカタログ]**、**[テーブル]** の順に選択します。テーブルリストから、孤立ファイルの削除用のオプティマイザーを無効にする Iceberg テーブルを選択します。

1. **[テーブルの詳細]** ページの下部のセクションで、**[テーブル最適化]** を選択します。

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", "enabled":'false'}'\ 
  --type orphan_file_deletion
```

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

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

------

# 最適化の詳細の表示
<a name="view-optimization-status"></a>

Apache Iceberg テーブルの最適化ステータスは、AWS Glue コンソール、AWS CLI、または AWS API オペレーションで表示できます。

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

**Iceberg テーブルの最適化ステータスを表示するには (コンソール)**
+ **[データカタログ]** の **[テーブル]** リストから Iceberg テーブルを選択すると、AWS Glue コンソールで Iceberg テーブルの最適化ステータスを表示できます。**[テーブルの最適化]** の下。**[すべて表示]** を選択する  
![\[[圧縮を有効にする] オプションを示す Apache Iceberg の [テーブルの詳細] ページ。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/table-list-compaction-status.png)

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

AWS CLI を使用して最適化の詳細を表示できます。

次の例では、アカウントID を有効な AWS アカウント ID、データベース名、テーブル名を実際の Iceberg テーブル名に置き換えます。`type` には、最適化タイプを指定します。許容値は、`compaction`、`retention`、および `orphan-file-deletion` です。
+ **テーブルの前回の圧縮実行の詳細を取得するには**

  ```
  aws get-table-optimizer \
    --catalog-id 123456789012 \
    --database-name iceberg_db \
    --table-name iceberg_table \
    --type compaction
  ```
+ 次の例を使用して、特定のテーブルのオプティマイザーの履歴を取得します。

  ```
  aws list-table-optimizer-runs \
    --catalog-id 123456789012 \
    --database-name iceberg_db \
    --table-name iceberg_table \
    --type compaction
  ```
+ 次の例は、複数のオプティマイザーの最適化実行と設定の詳細を取得する方法を示しています。最大 20 個のオプティマイザを指定できます。

  ```
  aws glue batch-get-table-optimizer \
  --entries '[{"catalogId":"123456789012", "databaseName":"iceberg_db", "tableName":"iceberg_table", "type":"compaction"}]'
  ```

------
#### [ API ]
+ `GetTableOptimizer` オペレーションを使用して、前回実行したオプティマイザの詳細を取得します。
+  特定のテーブル上の特定のオプティマイザーの履歴を取得するには、`ListTableOptimizerRuns` オペレーションを使用します。1 回の API 呼び出しで 20 個のオプティマイザーを指定できます。
+ [BatchGetTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-BatchGetTableOptimizer) オペレーションを使用して、アカウント内の複数のオプティマイザーの設定の詳細を取得します。

------

# Amazon CloudWatch メトリクスの表示
<a name="view-optimization-metrics"></a>

 テーブルオプティマイザーが正常に実行されると、サービスは最適化ジョブのパフォーマンスに関する Amazon CloudWatch メトリクスを作成します。**[CloudWatch メトリクス]** に移動し、**[メトリクス]**、**[すべてのメトリクス]** の順に選択できます。メトリクスは、特定の名前空間 (AWS Glue など)、テーブル名、またはデータベース名でフィルタリングできます。

 詳細については、「Amazon CloudWatch ユーザーガイド」の「[使用可能なメトリクスを表示する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)」を参照してください。

****圧縮****
+ 圧縮されたバイト数 
+ 圧縮ファイル数
+ ジョブに割り当てられた DPU 数 
+ ジョブの期間 (時間数) 

****スナップショット保持期限****
+ 削除されたデータファイルの数 
+ 削除されたマニフェストファイルの数
+ 削除されたマニフェストリストの数 
+ ジョブの期間 (時間数)

****孤立ファイルの削除****
+ 削除された孤立ファイルの数 
+ ジョブの期間 (時間数) 

# オプティマイザーの削除
<a name="delete-optimizer"></a>

AWS CLI または AWS API オペレーションを使用して、テーブルのオプティマイザーと関連するメタデータを削除できます。

テーブルの最適化履歴を削除するには、次の AWS CLI コマンドを実行します。オプティマイザーの `type` を、カタログ ID、データベース名、テーブル名と共に指定する必要があります。許容値は、`compaction`、`retention`、および `orphan_file_deletion` です。

```
aws glue delete-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --type compaction
```

 テーブルのオプティマイザーを削除するには、`DeleteTableOptimizer` オペレーションを使用します。

# 考慮事項と制限事項
<a name="optimizer-notes"></a>

 このセクションでは、AWS Glue Data Catalog 内でテーブルオプティマイザーを使用する際に考慮すべき点について説明します。

## 耐久性と正確性
<a name="durability-correctness"></a>

**S3 テーブルロケーション:**

複数の AWS Glue Data Catalog テーブルが同じ Amazon S3 ロケーションを共有しており、オプティマイザが有効になっている場合、1 つのテーブルのスナップショット保持または孤立ファイル削除オプティマイザにより、別のテーブルによって現在も参照されているファイルが削除される可能性があります。オプティマイザが有効になっている各テーブルに、他のテーブル (異なるデータベースのテーブルを含む) と共有されていない一意の Amazon S3 ロケーションがあることを確認してください。

**S3 ライフサイクルの有効期限:**

Iceberg テーブルストレージロケーションに適用される Amazon S3 ライフサイクル有効期限ルールでは、アクティブなスナップショットによって現在も参照されているマニフェストファイルとデータファイルを削除できます。バケットにライフサイクル有効期限ルールがある場合は、Iceberg テーブルストレージパスが除外されることを確認してください。

## マネージドデータ圧縮でサポートされる形式と制限事項
<a name="compaction-notes"></a>

データ圧縮は、暗号化されたテーブルからのデータの読み取りなど、データの読み書きのためのさまざまなデータ型と圧縮形式をサポートしています。

**同時実行制御:**

 Apache Iceberg は楽観的同時実行制御をサポートしているため、複数のライターが同時にオペレーションを実行できます。競合はコミット時に検出され、解決されます。ストリーミングパイプラインを使用する場合は、テーブルプロパティと圧縮設定を使用して適切な再試行設定を行い、同時書き込みを効果的に処理します。詳細なガイダンスについては、[Iceberg テーブルでの同時書き込みの管理](https://aws.amazon.com/blogs/big-data/manage-concurrent-write-conflicts-in-apache-iceberg-on-the-aws-glue-data-catalog/)に関する AWS ビッグデータブログを参照してください。

**圧縮の再試行:**

 圧縮オペレーションが 4 回連続して失敗すると、不要なコンピューティングリソースの消費を防ぐため、AWS Glue カタログテーブルの最適化によってオプティマイザが自動的に一時停止されます。まずログを調べ、圧縮が繰り返し失敗する理由を見つけてみてください。圧縮の最適化を再開するには、AWS Glue コンソールまたは API を使用してオプティマイザを再度有効にします。

 **データ圧縮は以下をサポートします。**
+ **暗号化** - データ圧縮では、デフォルトの Amazon S3 暗号化 (SSE-S3) とサーバー側 KMS 暗号化 (SSE-KMS) のみがサポートされます。
+ **圧縮戦略** – ビンパック、ソート、Z オーダーソート
+ 基礎となるデータを保存する Amazon S3 バケットが別のアカウントにある場合、データカタログが存在するアカウントから圧縮を実行できます。これを実行するには、圧縮ロールが Amazon S3 バケットにアクセスできる必要があります。

 **データ圧縮は現在、次をサポートしていません。**
+ **クロスアカウントテーブルでの圧縮** - クロスアカウントテーブルでは圧縮を実行できません。
+ **クロスリージョンテーブルでの圧縮** - クロスリージョンテーブルでは圧縮を実行できません。
+ **リソースのリンクでの圧縮の有効化**
+ **Amazon S3 Express One Zone ストレージクラスのテーブル ** – Amazon S3 Express One Zone Iceberg テーブルでは圧縮を実行できません。
+ **Z オーダー圧縮戦略では、次のデータ型がサポートされていません:**
  + 10 進数
  + TimestampWithoutZone

## スナップショット保持と孤立ファイル削除オプティマイザに関する考慮事項
<a name="retention-notes"></a>

スナップショット保持と孤立ファイル削除のオプティマイザーには、次の考慮事項が適用されます。
+ スナップショットの保持と孤立ファイルの削除プロセスでは、実行ごとに最大 1,000,000 個のファイルを削除できます。期限切れのスナップショットを削除するときに、削除の対象となるファイルの数が 1,000,000 を超えると、そのしきい値を超える残りのファイルは、孤立ファイルとしてテーブルストレージに引き続き存在します。
+ スナップショットは、保持するスナップショットの最小数と指定された保持期間という両方の基準が満たされた場合にのみ、スナップショット保持オプティマイザによって保持されます。
+ スナップショット保持オプティマイザは、Apache Iceberg から期限切れのスナップショットメタデータを削除し、期限切れのスナップショットのタイムトラベルクエリを防ぎ、オプションで関連するデータファイルを削除します。
+  オーファンファイル削除オプティマイザは、作成時間がオプティマイザ実行時からオーファンファイル削除保持期間より前である場合、Iceberg メタデータによって参照されなくなった孤立したデータとメタデータファイルを削除します。
+ Apache Iceberg は、特定のスナップショット状態へのポインターという名前のブランチとタグを使用してバージョン管理を容易にします。各ブランチとタグは、それぞれのレベルで定義された保持ポリシーによって管理される、独自の独立したライフサイクルに従います。AWS Glue Data Catalog オプティマイザは、これらのライフサイクルポリシーを考慮し、指定された保持ルールを確実に遵守します。ブランチおよびタグレベルの保持ポリシーは、オプティマイザ設定よりも優先されます。

   詳細については、Apache Iceberg のドキュメントの「[分岐とタグ付け](https://iceberg.apache.org/docs/nightly/branching/)」を参照してください。
+ スナップショット保持と孤立ファイル削除オプティマイザは、設定されたパラメータに従ってクリーンアップの対象となるファイルを削除します。適切なバケットに S3 バージョニングポリシーとライフサイクルポリシーを実装することで、ファイル削除の制御を強化します。

   バージョニングの設定とライフサイクルルールの作成に関する詳細な手順については、「[https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。
+  孤立ファイルについて適切な判断を行うには、指定されたテーブルの場所とサブパスが他のテーブルやデータソースと重複したり、他のテーブルやデータソースのデータを含んでいないことを確認してください。パスが重複すると、ファイルの意図しない削除によって回復不可能なデータ損失が発生する可能性があります。

## OversizedAllocationException 例外のデバッグ
<a name="debug-exception"></a>

`OversizedAllocationException` 例外を解決するには：
+ ベクトル化されたリーダーのバッチサイズを減らして確認します。デフォルトバッチサイズは 5000 です。これは `read.parquet.vectorization.batch-size` で制御されます。
  + 複数のバリエーションがあってもこれが機能しない場合は、ベクトル化をオフにします。これは `read.parquet.vectorization.enabled` で制御されます。

# テーブルオプティマイザーがサポートされているリージョン
<a name="regions-optimizers"></a>

AWS Glue Data Catalog のテーブル最適化機能 (圧縮、スナップショット保持、孤立ファイルの削除) は、次の AWS リージョン で使用できます。
+ アジアパシフィック (東京)
+ アジアパシフィック (ソウル)
+ アジアパシフィック (ムンバイ)
+ アジアパシフィック (シンガポール)
+ アジアパシフィック (シドニー)
+ アジアパシフィック (ジャカルタ)
+ カナダ (中部)
+ 欧州 (アイルランド)
+ 欧州 (ロンドン)
+ 欧州 (フランクフルト)
+ 欧州 (ストックホルム)
+ 米国東部 (バージニア北部)
+ 米国東部 (オハイオ)
+ 米国西部 (オレゴン）
+ 南米 (サンパウロ）

# Iceberg テーブルのクエリパフォーマンスの最適化
<a name="iceberg-column-statistics"></a>

Apache Iceberg は、膨大な分析データセット用の高性能なオープンテーブル形式です。AWS Glue は、Iceberg テーブルの各列に対する個別の値の数 (NDV) の計算と更新をサポートしています。これらの統計により、大規模データセットを扱うデータエンジニアやサイエンティストにとって、クエリの最適化、データ管理、パフォーマンス効率が改善されます。

 AWS Glue は、Iceberg テーブルの各列の個別の値の数を推定し、Iceberg テーブルスナップショットに関連付けられた Amazon S3 の [Puffin](https://iceberg.apache.org/puffin-spec/) ファイルに保存します。Puffin は、インデックス、統計、スケッチなどのメタデータを保存するように設計された Iceberg ファイル形式です。スナップショットに関連付けられた Puffin ファイルにスケッチを保存すると、トランザクションの一貫性と NDV 統計の鮮度が確保されます。

AWS Glue コンソールまたは AWS CLI を使用して列統計生成タスクを実行するように設定できます。プロセスを開始すると、AWS Glue はバックグラウンドで Spark ジョブを開始し、データカタログ内の AWS Glue テーブルメタデータを更新します。列統計は、AWS Glue コンソールもしくは AWS CLI を使用して、または [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html) API オペレーションを呼び出すことによって表示できます。

**注記**  
AWS Lake Formation の許可を使用してテーブルに対するアクセスを制御している場合、列統計タスクによって引き受けられるロールには、統計を生成するための完全なテーブルアクセスが必要です。

**Topics**
+ [列統計を生成するための前提条件](iceberg-column-stats-prereqs.md)
+ [Iceberg テーブルの列統計の生成](iceberg-generate-column-stats.md)
+ [関連情報](#see-also-iceberg-stats)

# 列統計を生成するための前提条件
<a name="iceberg-column-stats-prereqs"></a>

Iceberg テーブルの列統計を生成または更新するために、統計生成タスクはユーザーに代わって AWS Identity and Access Management (IAM) ロールを引き受けます。ロールに付与された許可に基づいて、列統計生成タスクは Amazon S3 データストアからデータを読み取ることができます。

AWS Glue では、列統計生成タスクを設定するときに、`AWSGlueServiceRole` AWS 管理ポリシーと指定されたデータソースに必要なインラインポリシーを含むロールを作成できます。

列統計の生成に既存のロールを指定する場合は、そのロールに `AWSGlueServiceRole` ポリシーまたは同等のポリシー (またはこのポリシーのスコープダウンバージョン) と、必要なインラインポリシーが含まれてることを確認します。

必要な許可の詳細については、「[列統計を生成するための前提条件](column-stats-prereqs.md)」を参照してください。

# Iceberg テーブルの列統計の生成
<a name="iceberg-generate-column-stats"></a>

以下の手順に従って、AWS Glue コンソールまたは AWS CLI を使用してデータカタログで統計を生成するスケジュールを設定するか、**StartColumnStatisticsTaskRun** オペレーションを実行します。

**列統計を生成するには**

1. AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) にサインインします。

1. [データカタログ] の下の **[テーブル]** を選択します。

1. リストから Iceberg テーブルを選択します。

1. **[アクション]** メニューで、**[列の統計]** の **[オンデマンドで生成]** を選択します。

   **[テーブル]** ページの下のセクションにある **[列統計]** タブで **[統計を生成]** ボタンを選択することもできます。

1. **[統計を生成]** ページで、統計の生成の詳細を入力します。「[スケジュールで列統計の生成](generate-column-stats.md)」セクションのステップ 6～11 に従って、Iceberg テーブルの統計生成にスケジュールを設定します。

   [オンデマンドでの列統計の生成](column-stats-on-demand.md) の手順に従って、オンデマンドで列統計を生成することも選択できます。
**注記**  
[サンプリング] オプションは Iceberg テーブルでは使用できません。

   AWS Glue は、Amazon S3 の場所内の指定されたスナップショット ID にコミットされた新しい Puffin ファイルに対して、Iceberg テーブルの各列にある個別の値の数を計算します。

## 関連情報
<a name="see-also-iceberg-stats"></a>
+ [列統計の表示](view-column-stats.md)
+ [列統計タスクの実行の表示](view-stats-run.md)
+ [列統計タスクの実行の停止](stop-stats-run.md)
+ [列統計の削除](delete-column-stats.md)