

# データカタログにアクセスする
データカタログにアクセスする

 AWS Glue Data Catalog (データカタログ) を使用すると、データを検出してこれを理解することができます。データカタログは、スキーマの定義、データ型、場所などのメタデータを一貫して維持する方法を提供します。次の方法を使用してデータカタログにアクセスできます。
+ AWS Glue コンソール – ウェブベースのユーザーインターフェイスである AWS Glue コンソールからデータカタログにアクセスして管理できます。コンソールでは、データベース、テーブル、および関連するメタデータを参照および検索したり、メタデータ定義を作成、更新、削除したりできます。
+ AWS Glue クローラー – クローラーは、データソースを自動的にスキャンし、データカタログにメタデータを入力するプログラムです。クローラーを作成して実行し、Amazon S3、Amazon RDS、Amazon DynamoDB、Amazon CloudWatch、および MySQL や PostgreSQL などの JDBC 準拠のリレーショナルデータベース、Snowflake や Google BigQuery などのいくつかの非 AWS ソースからのデータを検出してカタログ化できます。
+ AWS Glue API - AWS Glue API を使用してプログラムでデータカタログにアクセスできます。これらの API を使用すると、プログラムでデータカタログを操作し、自動化と他のアプリケーションやサービスとの統合が可能になります。
+ AWS Command Line Interface (AWS CLI) – AWS CLI を使用して、コマンドラインからデータカタログにアクセスして管理できます。CLI には、メタデータ定義の作成、更新、削除、メタデータ情報のクエリと取得のためのコマンドが用意されています。
+ 他の AWS サービスとの統合 – データカタログは他のさまざまな AWS サービスと統合されるため、カタログに保存されているメタデータにアクセスして利用できます。たとえば、Amazon Athena を使用してデータカタログのメタデータを使用してデータソースをクエリし、AWS Lake Formation を使用してデータカタログリソースのデータアクセスとガバナンスを管理できます。

**Topics**
+ [

# AWS Glue Iceberg REST エンドポイントを使用したデータカタログへの接続方法
](connect-glu-iceberg-rest.md)
+ [

# AWS Glue Iceberg REST 拡張エンドポイントを使用したデータカタログへの接続
](connect-glue-iceberg-rest-ext.md)
+ [

# AWS Glue Apache Iceberg 用の REST API の仕様
](iceberg-rest-apis.md)
+ [

# スタンドアロンの Spark アプリケーションからデータカタログへの接続
](connect-gludc-spark.md)
+ [

# Amazon Redshift と Apache Iceberg 間のデータマッピング
](data-mapping-rs-iceberg.md)
+ [

# AWS Glue Iceberg REST Catalog API を使用する際の考慮事項と制限事項
](limitation-glue-iceberg-rest-api.md)

# AWS Glue Iceberg REST エンドポイントを使用したデータカタログへの接続方法


 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

## プレフィックスとカタログパスパラメータ


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)」を参照してください。

## 名前空間パスパラメータ


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

# AWS Glue Iceberg REST 拡張エンドポイントを使用したデータカタログへの接続


 AWS Glue Iceberg REST 拡張エンドポイントは、Apache Iceberg REST 仕様には含まれていない追加の API と、サーバー側のスキャン計画機能を提供します。これらの追加の API は、Amazon Redshift マネージドストレージに保存されているテーブルにアクセスするときに使用します。エンドポイントには、Apache Iceberg AWS Glue Data Catalog 拡張機能を使用して、アプリケーションからアクセスすることができます。

**エンドポイント設定** – Redshift マネージドストレージ内にあるテーブル付カタログは、サービスエンドポイントを使用してアクセスできます。リージョン固有のエンドポイントについては、「[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/extensions
```

```
catalog_name = "myredshiftcatalog"
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", "glue") \
    .config(f"spark.sql.catalog.{catalog_name}.glue.id", "{123456789012}:redshiftnamespacecatalog/redshiftdb") \
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
```

# AWS Glue Apache Iceberg 用の REST API の仕様
AWS Glue Apache Iceberg 用の REST API

このセクションでは、AWS Glue Iceberg REST カタログと AWS Glue 拡張 API に関する仕様と、これらの API を使用する際の考慮事項について説明します。

AWS Glue Data Catalog エンドポイントへの API リクエストは、AWS Signature Version 4 (SigV4) を使用して認証されます。AWS SigV4 の詳細については「[API リクエストに対する AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」のセクションを参照してください。

AWS Glue サービスエンドポイントと AWS Glue メタデータにアクセスする場合、アプリケーションは `glue:getCatalog` IAM アクションを必要とする IAM ロールを引き受けます。

データカタログとそのオブジェクトへのアクセスは、IAM、Lake Formation、または Lake Formation ハイブリッドモードのアクセス許可を使用して管理できます。

データカタログのフェデレーティッドカタログには、Lake Formation に登録されたデータロケーションがあります。Lake Formation は Data Catalog と連動して、データカタログに対するユーザーアクセスを管理するためのデータベーススタイルのアクセス許可を提供します。

IAM、AWS Lake Formation、Lake Formation のいずれかのハイブリッドモードのアクセス許可を使用することで、デフォルトのカタログデータとそのオブジェクトへのアクセスを管理できます。

Lake Formation のマネージド型オブジェクトでデータを作成、挿入、または削除するには、IAM ユーザーまたはロールに特定のアクセス許可を設定する必要があります。
+ CREATE\$1CATALOG – カタログの作成に必要 
+ CREATE\$1DATABASE – データベースの作成に必要
+ CREATE\$1TABLE – テーブルの作成に必要
+ DELETE – テーブルからのデータの削除に必要
+ DESCRIBE – メタデータの読み取りに必要 
+ DROP – テーブルまたはデータベースのドロップ/削除に必要
+ INSERT – プリンシパルがデータをテーブルに挿入する必要がある場合に必要
+ SELECT – プリンシパルがテーブルからデータを選択する必要がある場合に必要

詳細については、「AWS Lake Formation デベロッパーガイド」の「[Lake Formation permissions reference](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html)」を参照してください。

# GetConfig



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | GetConfig | 
| Type |  Iceberg REST Catalog API  | 
| REST パス |  GET /iceberg/v1/config  | 
| IAM アクション |  glue:GetCatalog  | 
| Lake Formation 許可 | 該当しない | 
| CloudTrail のイベント |  glue:GetCatalog  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L67 | 

****考慮事項と制限事項****
+ `warehouse` クエリパラメータはカタログ AWS Glue ID に設定する必要があります。設定されていない場合、現在のアカウントのルートカタログを使用してレスポンスが返されます。詳細については、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」を参照してください。

# GetCatalog



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | GetCatalog | 
| Type |  AWS Glue 拡張機能 API  | 
| REST パス |  GET/extensions/v1/catalogs/\$1catalog\$1  | 
| IAM アクション |  glue:GetCatalog  | 
| Lake Formation 許可 | DESCRIBE | 
| CloudTrail のイベント |  glue:GetCatalog  | 
| Open API の定義 | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L40 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。

# ListNamespaces



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | ListNamespaces | 
| Type |  Iceberg REST Catalog API  | 
| REST パス |  GET/iceberg/v1/catalogs/\$1catalog\$1/namespaces  | 
| IAM アクション |  glue:GetDatabase  | 
| Lake Formation 許可 | ALL, DESCRIBE, SELECT | 
| CloudTrail のイベント |  glue:GetDatabase  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L205 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ 次のレベルの名前空間のみが表示されます。より深いレベルで名前空間を一覧表示するには、ネストされたカタログ ID をカタログパスパラメータで指定します。

# CreateNamespace



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | CreateNamespace | 
| Type |  Iceberg REST Catalog API  | 
| REST パス |  POST/iceberg/v1/catalogs/\$1catalog\$1/namespaces  | 
| IAM アクション |  glue:CreateDatabase  | 
| Lake Formation 許可 | ALL, DESCRIBE, SELECT | 
| CloudTrail のイベント |  glue:CreateDatabase  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L256 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ 作成できるのは単一レベルの名前空間のみです。マルチレベルの名前空間を作成するには、各レベルを繰り返し作成して、カタログパスパラメータを使用してレベルに接続する必要があります。

# StartCreateNamespaceTransaction



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | StartCreateNamespaceTransaction | 
| Type |  AWS Glue 拡張機能 API  | 
| REST パス |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces  | 
| IAM アクション |  glue:CreateDatabase  | 
| Lake Formation 許可 | ALL, DESCRIBE, SELECT | 
| CloudTrail のイベント |  glue:CreateDatabase  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L256 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ 作成できるのは単一レベルの名前空間のみです。マルチレベル名前空間を作成するには、各レベルを繰り返し作成し、カタログパスパラメータを使用してレベルに接続する必要があります。
+ API は非同期で、`CheckTransactionStatus` API コールを使用して追跡するために使用できるトランザクション ID を返します。
+  この API を呼び出すことができるのは、`GetCatalog` API コールにレスポンスの `use-extensions=true` パラメータが含まれている場合のみです。

## LoadNamespaceMetadata



**一般的な情報**  

|  |  | 
| --- |--- |
| オペレーション名 | LoadNamespaceMetadata | 
| タイプ |  Iceberg REST Catalog API  | 
| REST パス |  GET/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1  | 
| IAM アクション |  glue:GetDatabase  | 
| Lake Formation 許可 | ALL, DESCRIBE, SELECT | 
| CloudTrail のイベント |  glue:GetDatabase  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L302 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。

## UpdateNamespaceProperties



**一般的な情報**  

|  |  | 
| --- |--- |
| オペレーション名 | UpdateNamespaceProperties | 
| タイプ |  Iceberg REST Catalog API  | 
| REST パス |  POST /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/properties  | 
| IAM アクション |  glue:UpdateDatabase  | 
| Lake Formation 許可 | ALL, ALTER | 
| CloudTrail のイベント |  glue:UpdateDatabase  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L400 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。

# DeleteNamespace



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | DeleteNamespace | 
| Type |  Iceberg REST Catalog API  | 
| REST パス |  DELETE/iceberg/v1/catalogs/\$1catalog\$1/namespces/\$1ns\$1  | 
| IAM アクション |  glue:DeleteDatabase  | 
| Lake Formation 許可 | ALL, DROP | 
| CloudTrail のイベント |  glue:DeleteDatabase  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L365 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ データベースにオブジェクトがある場合、オペレーションは失敗します。
+ API は非同期で、`CheckTransactionStatus` API コールを使用して追跡するために使用できるトランザクション ID を返します。
+  API は、`GetCatalog` API コールがレスポンスで `use-extensions=true` を示す場合にのみ使用できます。

# StartDeleteNamespaceTransaction



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | StartDeleteNamespaceTransaction | 
| Type |  AWS Glue 拡張機能 API  | 
| REST パス |  DELETE /extensions/v1/catalogs/\$1catalog\$1/namespces/\$1ns\$1  | 
| IAM アクション |  glue:DeleteDatabase  | 
| Lake Formation 許可 | ALL, DROP | 
| CloudTrail のイベント |  glue:DeleteDatabase  | 
| Open API の定義 | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L85 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ データベースにオブジェクトがある場合、オペレーションは失敗します。
+ API は非同期で、`CheckTransactionStatus` API コールを使用して追跡するために使用できるトランザクション ID を返します。
+  API は、`GetCatalog` API コールがレスポンスで `use-extensions=true` を示す場合にのみ使用できます。

# ListTables



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | ListTables | 
| Type |  Iceberg REST Catalog API  | 
| REST パス |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| IAM アクション |  glue:GetTables  | 
| Lake Formation 許可 | ALL, SELECT, DESCRIBE | 
| CloudTrail のイベント |  glue:GetTables  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L463 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ Iceberg 以外のテーブルを含むすべてのテーブルが一覧表示されます。テーブルを Iceberg テーブルとしてロードできるかどうかを確認するには、 `LoadTable` オペレーションを呼び出します。

# CreateTable



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | CreateTable | 
| Type |  Iceberg REST Catalog API  | 
| REST パス |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| IAM アクション |  glue:CreateTable  | 
| Lake Formation 許可 | ALL, CREATE\$1TABLE | 
| CloudTrail のイベント |  glue:CreateTable  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L497 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ ステージングを使用した `CreateTable` はサポートされていません。`stageCreate` クエリパラメータを指定するとオペレーションは失敗します。`CREATE TABLE AS SELECT` のようなオペレーションはサポートされていないため、回避策として `CREATE TABLE` と `INSERT INTO` の組み合わせを使用できます。
+ `CreateTable` API オペレーションはオプション `state-create = TRUE` をサポートしていません。

# StartCreateTableTransaction



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | CreateTable | 
| Type |  AWS Glue 拡張機能 API  | 
| REST パス |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| IAM アクション |  glue:CreateTable  | 
| Lake Formation 許可 | ALL, CREATE\$1TABLE | 
| CloudTrail のイベント |  glue:CreateTable  | 
| Open API の定義 | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L107 | 

****考慮事項と制限事項****
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ ステージングを使用した `CreateTable` はサポートされていません。`stageCreate` クエリパラメータを指定するとオペレーションは失敗します。`CREATE TABLE AS SELECT` のようなオペレーションはサポートされていないため、ユーザーは問題を回避するために `CREATE TABLE` と `INSERT INTO` を組み合わせて使用する必要があります。
+ API は非同期で、`CheckTransactionStatus` API コールを使用して追跡するために使用できるトランザクション ID を返します。
+  API は、`GetCatalog` API コールがレスポンスで `use-extensions=true` を示す場合にのみ使用できます。

# LoadTable



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | LoadTable | 
| タイプ |  Iceberg REST Catalog API  | 
| REST パス |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| IAM アクション |  glue:GetTable  | 
| Lake Formation 許可 | ALL, SELECT, DESCRIBE | 
| CloudTrail のイベント |  glue:GetTable  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L616 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ ステージングを使用した `CreateTable` はサポートされていません。`stageCreate` クエリパラメータを指定するとオペレーションは失敗します。`CREATE TABLE AS SELECT` のようなオペレーションはサポートされていないため、ユーザーは問題を回避するために `CREATE TABLE` と `INSERT INTO` を組み合わせて使用する必要があります。
+ API は非同期で、`CheckTransactionStatus` API コールを使用して追跡するために使用できるトランザクション ID を返します。
+  API は、`GetCatalog` API コールがレスポンスで `use-extensions=true` を示す場合にのみ使用できます。

# ExtendedLoadTable



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | LoadTable | 
| タイプ |  AWS Glue 拡張機能 API  | 
| REST パス |  GET /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| IAM アクション |  glue:GetTable  | 
| Lake Formation 許可 | ALL, SELECT, DESCRIBE | 
| CloudTrail のイベント |  glue:GetTable  | 
| Open API の定義 | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L134 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ スナップショットクエリパラメータでは `all` モードのみがサポートされます。
+ `LoadTable` API と比較すると、`ExtendedLoadTable` API は次の点が異なります。
  +  すべてのフィールドが利用可能になるよう厳密に強制されません。
  + レスポンスの設定フィールドに以下の追加パラメータを提供します。  
**追加パラメータ**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/extended-load-table.html)

# PreplanTable



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | PreplanTable | 
| タイプ |  AWS Glue 拡張機能 API  | 
| REST パス |  POST /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1/preplan  | 
| IAM アクション |  glue:GetTable  | 
| Lake Formation 許可 | ALL, SELECT, DESCRIBE | 
| CloudTrail のイベント |  glue:GetTable  | 
| Open API の定義 | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L211 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ この API の呼び出し元は、ページトークンに基づいて、取得する残りの結果があるかどうかを常に判断する必要があります。サーバー側がまだ処理中で指定された応答時間内に結果を生成できない場合、ページ分割トークンを含む空白のページが返されることがあります。
+  この API は、API `ExtendedLoadTable` レスポンスに `aws.server-side-capabilities.scan-planning=true` が含まれている場合にのみ使用できます。

# PlanTable



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | PlanTable | 
| タイプ |  AWS Glue 拡張機能 API  | 
| REST パス |  POST /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1/plan  | 
| IAM アクション |  glue:GetTable  | 
| Lake Formation 許可 | ALL, SELECT, DESCRIBE | 
| CloudTrail のイベント |  glue:GetTable  | 
| Open API の定義 | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L243 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ この API の呼び出し元は、ページトークンに基づいて、取得する残りの結果があるかどうかを常に判断する必要があります。サーバー側がまだ処理中で指定された応答時間内に結果を生成できない場合、ページ分割トークンを含む空白のページが返されることがあります。
+  この API は、API `ExtendedLoadTable` レスポンスに `aws.server-side-capabilities.scan-planning=true` が含まれている場合にのみ使用できます。

# TableExists



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | TableExists | 
| タイプ |  Iceberg REST Catalog API  | 
| REST パス |  HEAD/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| IAM アクション |  glue:GetTable  | 
| Lake Formation 許可 | ALL, SELECT, DESCRIBE | 
| CloudTrail のイベント |  glue:GetTable  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L833 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。

# UpdateTable



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | UpdateTable | 
| タイプ |  Iceberg REST Catalog API  | 
| REST パス |  POST /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| IAM アクション |  glue:UpdateTable  | 
| Lake Formation 許可 | ALL, ALTER | 
| CloudTrail のイベント |  glue:UpdateTable  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L677 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。

# StartUpdateTableTransaction



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | StartUpdateTableTransaction | 
| タイプ | AWS Glue 拡張機能 API | 
| REST パス |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| IAM アクション |  glue:UpdateTable  | 
| Lake Formation 許可 |  ALL, ALTER  | 
| CloudTrail のイベント |  glue:UpdateTable  | 
| Open API の定義 | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L154 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ API は非同期で、`CheckTransactionStatus` API コールを使用して追跡するために使用できるトランザクション ID を返します。
+  この API を使用して `RenamTable` オペレーションを実行することもできます。この場合、呼び出し元は、名前を変更するテーブルの glue:CreateTable または LakeFormation CREATE\$1TABLE アクセス許可も取得する必要があります。
+  この API は、API `ExtendedLoadTable` レスポンスに `aws.server-side-capabilities.scan-planning=true` が含まれている場合にのみ使用できます。

# DeleteTable



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | DeleteTable | 
| タイプ |  Iceberg REST Catalog API  | 
| REST パス |  DELETE/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| IAM アクション |  glue:DeleteTable  | 
| Lake Formation 許可 | ALL, DROP | 
| CloudTrail のイベント |  glue:DeleteTable  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L793 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ `DeleteTable` API オペレーションはパージオプションをサポートします。パージが `true` に設定されている場合、テーブルデータは削除されます。設定されていない場合は削除されません。Amazon S3 のテーブルの場合、このオペレーションでテーブルデータが削除されることはありません。テーブルが Amazon S3 と `purge = TRUE,` に保存されている場合、このオペレーションは失敗します。

  テーブルが Amazon Redshift マネージドストレージに保存されている場合、Amazon Redshift での `DROP TABLE` の動作と同様に、このオペレーションによりテーブルデータは削除されます。テーブルが Amazon Redshift と `purge = FALSE` に保存されている場合、このオペレーションは失敗します。
+ `purgeRequest=true` はサポートされていません。

# StartDeleteTableTransaction



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | StartDeleteTableTransaction | 
| タイプ |  AWS Glue 拡張機能 API  | 
| REST パス |  DELETE /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| IAM アクション |  glue:DeleteTable  | 
| Lake Formation 許可 | ALL, DROP | 
| CloudTrail のイベント |  glue:DeleteTable  | 
| Open API の定義 | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L793 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。
+ REST Path パラメータでは、単一レベルの名前空間のみを指定できます。詳細については「[名前空間パスパラメータ](connect-glu-iceberg-rest.md#ns-path-param)」セクションを参照してください。
+ `purgeRequest=false` はサポートされていません。
+  API は非同期で、`CheckTransactionStatus` を介して追跡できるトランザクション ID を返します。

# CheckTransactionStatus



**一般情報**  

|  |  | 
| --- |--- |
| オペレーション名 | CheckTransactionStatus | 
| タイプ |  AWS Glue 拡張機能 API  | 
| REST パス |  POST/extensions/v1/transactions/status  | 
| IAM アクション |  トランザクションを開始するアクションと同じアクセス許可  | 
| Lake Formation 許可 | トランザクションを開始するアクションと同じアクセス許可 | 
| Open API の定義 | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L273 | 

**考慮事項**
+ カタログパスパラメータは、「[プレフィックスとカタログパスパラメータ](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters)」セクションで説明されているスタイルに従う必要があります。

# スタンドアロンの Spark アプリケーションからデータカタログへの接続


Apache Iceberg コネクタを使用することで、スタンドアロンのアプリケーションからデータカタログに接続することができます。

1. Spark アプリケーションの IAM ロールを作成します。

1. Iceberg コネクタを使用して AWS Glue Iceberg Rest エンドポイントに接続します。

   ```
   # configure your application. Refer to https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html for best practices on configuring environment variables.
   export AWS_ACCESS_KEY_ID=$(aws configure get appUser.aws_access_key_id)
   export AWS_SECRET_ACCESS_KEY=$(aws configure get appUser.aws_secret_access_key)
   export AWS_SESSION_TOKEN=$(aws configure get appUser.aws_secret_token)
   
   export AWS_REGION=us-east-1
   export REGION=us-east-1
   export AWS_ACCOUNT_ID = {specify your aws account id here}
   
   ~/spark-3.5.3-bin-hadoop3/bin/spark-shell \
       --packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.0 \
       --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
       --conf "spark.sql.defaultCatalog=spark_catalog" \
       --conf "spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog" \
       --conf "spark.sql.catalog.spark_catalog.type=rest" \
       --conf "spark.sql.catalog.spark_catalog.uri=https://glue.us-east-1.amazonaws.com/iceberg" \
       --conf "spark.sql.catalog.spark_catalog.warehouse = {AWS_ACCOUNT_ID}" \
       --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \
       --conf "spark.sql.catalog.spark_catalog.rest.signing-name=glue" \
       --conf "spark.sql.catalog.spark_catalog.rest.signing-region=us-east-1" \
       --conf "spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO" \
       --conf "spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialProvider"
   ```

1. データカタログのデータをクエリします。

   ```
   spark.sql("create database myicebergdb").show()
   spark.sql("""CREATE TABLE myicebergdb.mytbl (name string) USING iceberg location 's3://bucket_name/mytbl'""")
   spark.sql("insert into myicebergdb.mytbl values('demo') ").show()
   ```

# Amazon Redshift と Apache Iceberg 間のデータマッピング


Redshift と Iceberg は、さまざまなデータ型をサポートしています。次の互換性マトリクスは、この 2 つのデータシステム間でデータをマッピングする際のサポートと制限の概要を示しています。各データシステムでサポートされているデータ型の詳細については、「[Amazon Redshift データ型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)」と「[Apache Iceberg Table Specifications](https://iceberg.apache.org/spec/#primitive-types)」を参照してください。


| Redshift データ型 | エイリアス | Iceberg データ型 | 
| --- | --- | --- | 
| SMALLINT | INT2 | int | 
| INTEGER | INT、INT4 | int | 
| BIGINT | INT8 | long | 
| DECIMAL | NUMERIC | decimal | 
| REAL | FLOAT4 | フロート | 
| REAL | FLOAT4 | フロート | 
| DOUBLE PRECISION | FLOAT8、FLOAT | double | 
| CHAR | CHARACTER, NCHAR | 文字列 | 
| VARCHAR | CHARACTER VARYING, NVARCHAR | 文字列 | 
| BPCHAR |  | 文字列 | 
| TEXT |  | 文字列 | 
| DATE |  | date | 
| TIME | TIME WITHOUT TIMEZONE | 時間 | 
| TIME | TIME WITH TIMEZONE | サポート外 | 
| TIMESTAMP | TIMESTAMP WITHOUT TIMEZONE | TIMESTAMP | 
| TIMESTAMPZ | TIMESTAMP WITH TIMEZONE | TIMESTAMPZ | 
| INTERVAL YEAR TO MONTH |  | サポートされていません | 
| INTERVAL DAY TO SECOND |  | サポートされていません | 
| BOOLEAN | BOOL | ブール | 
| HLLSKETCH |  | サポートされていません | 
| SUPER |  | サポートされていません | 
| VARBYTE | VARBINARY、BINARY VARYING | バイナリ | 
| GEOMETRY |  | サポートされていません | 
| GEOGRAPHY |  | サポートされていません | 

# AWS Glue Iceberg REST Catalog API を使用する際の考慮事項と制限事項


Apache Iceberg REST Catalog データ定義言語 (DDL) オペレーション動作を使用する際の考慮事項と制限事項は次のとおりです。

**考慮事項**
+  **`RenameTable` API の動作** – `RenameTable` オペレーションは Amazon Redshift のテーブルではサポートされていますが、Amazon S3 のテーブルではサポートされていません。
+  **Amazon Redshift の名前空間とテーブルの DDL オペレーション** – Amazon Redshift の名前空間とテーブルの作成、更新、削除のオペレーションは、Amazon Redshift のマネージドワークグループがいつ利用可能か、および競合する DDL と DML トランザクションが進行中かどうかに依存し、オペレーションはロックを待機してから変更のコミットを試みる必要があるため、非同期オペレーションとなります。

**制限**
+  Apache Iceberg REST 仕様の View API は、AWS Glue Iceberg REST Catalog ではサポートされていません。