

# AWS Glue Iceberg REST エンドポイントを使用したデータカタログへの接続方法
<a name="connect-glu-iceberg-rest"></a>

 AWS Glue の Iceberg REST エンドポイントは、Apache Iceberg REST 仕様で指定された API オペレーションに対応しています。Iceberg REST クライアントを使用すると、分析エンジンで実行されているアプリケーションをデータカタログでホストされている REST カタログに接続することができます。

 エンドポイントは、Apache Iceberg テーブル仕様の両方 (v1 と v2) をサポートしており、デフォルトでは v2 に設定されています。Iceberg テーブル v1 仕様を使用する場合は、API コールで v1 を指定する必要があります。API オペレーションを使用すると、Amazon S3 オブジェクトストレージと Amazon S3 テーブルストレージの両方に保存されている Iceberg テーブルにアクセスできます。

**エンドポイント設定**

サービスエンドポイントを使用して AWS Glue Iceberg REST カタログにアクセスできます。リージョン固有のエンドポイントについては、「[AWS Glue サービスエンドポイントのリファレンスガイド](https://docs.aws.amazon.com/general/latest/gr/glue.html#glue_region)」を参照してください。例えば、us-east-1 リージョンの AWS Glue に接続する場合、エンドポイント URI プロパティを次のように設定する必要があります。

```
Endpoint : https://glue.us-east-1.amazonaws.com/iceberg
```

**追加の設定プロパティ** – Iceberg クライアントを使用して Spark などの分析エンジンをサービスエンドポイントに接続する場合は、次のアプリケーション設定プロパティを指定する必要があります。

```
catalog_name = "mydatacatalog"
aws_account_id = "123456789012"
aws_region = "us-east-1"
spark = SparkSession.builder \
    ... \
    .config("spark.sql.defaultCatalog", catalog_name) \
    .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.type", "rest") \
    .config(f"spark.sql.catalog.{catalog_name}.uri", "https://glue.{aws_region}.amazonaws.com/iceberg") \
    .config(f"spark.sql.catalog.{catalog_name}.warehouse", "{aws_account_id}") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.sigv4-enabled", "true") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.signing-name", "glue") \    
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
```

AWS Glue Iceberg エンドポイント ` https://glue.us-east-1.amazonaws.com/iceberg` は、次の Iceberg REST API をサポートします。
+ GetConfig
+ ListNamespaces
+ CreateNamespace
+ LoadNamespaceMetadata
+ UpdateNamespaceProperties
+ DeleteNamespace
+ ListTables
+ CreateTable
+ LoadTable
+ TableExists
+ UpdateTable
+ DeleteTable

## プレフィックスとカタログパスパラメータ
<a name="prefix-catalog-path-parameters"></a>

Iceberg REST Catalog API のリクエスト URL には、自由形式のプレフィックスが含まれます。例えば、`ListNamespaces` API コールは `GET/v1/{prefix}/namespaces` の URL 形式を使用します。AWS Glue プレフィックスは、REST パスが AWS Glue マルチカタログ階層に確実に一致するように常に `/catalogs/{catalog}` 構造に従います。`{catalog}` パスパラメータは、次のルールに基づいて派生できます。


| **アクセスパターン** |  **Glue カタログ ID スタイル**  |  **プレフィックススタイル**  | **デフォルトのカタログ ID の例** |  **REST ルートの例**  | 
| --- | --- | --- | --- | --- | 
|  現在のアカウントのデフォルトカタログにアクセスする  | 不要 | : |  該当なし  |  GET /v1/catalogs/:/namespaces  | 
|  特定のアカウントのデフォルトカタログにアクセスする  | accountID | accountID | 111122223333 | GET /v1/catalogs/111122223333/namespaces | 
|  現在のアカウントのネストされたカタログにアクセスする  |  catalog1/catalog2  |  catalog1/catalog2  |  rmscatalog1:db1  |  GET /v1/catalogs/rmscatalog1:db1/namespaces  | 
|  特定のアカウントのネストされたカタログにアクセスする  |  accountId:catalog1/catalog2  |  accountId:catalog1/catalog2  |  123456789012/rmscatalog1:db1  |  GET /v1/catalogs/123456789012:rmscatalog1:db1/namespaces  | 

このカタログ ID からプレフィックスへのマッピングは、REST API を直接呼び出す場合にのみ必要です。エンジンを介して AWS Glue Iceberg REST Catalog API を使用する場合、Iceberg REST Catalog API 設定の `warehouse` パラメータまたは AWS Glue 拡張機能 API 設定の `glue.id` パラメータで AWS Glue カタログ ID を指定する必要があります。例えば、EMR Spark での使用方法については、「[Use an Iceberg cluster with Spark](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-spark-cluster.html)」を参照してください。

## 名前空間パスパラメータ
<a name="ns-path-param"></a>

Iceberg REST Catalog API パスの名前空間には、複数のレベルを含めることができます。ただし、AWS Glue は単一レベルの名前空間のみをサポートします。マルチレベルカタログ階層の名前空間にアクセスするには、名前空間の上にあるマルチレベルカタログに接続して名前空間を参照します。これにより、`catalog.namespace.table` の 3 つの部分で構成される表記をサポートするクエリエンジンが AWS Glue の複数レベルカタログ階層内のオブジェクトにアクセスできます。マルチレベルの名前空間を使用する場合とは異なり、互換性の問題はありません。