

# 圧縮オプティマイザの有効化
<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 時間のタイムスタンプです。

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

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

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