

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 AWS Glue Iceberg REST 端點連線至 Data Catalog
<a name="connect-glu-iceberg-rest"></a>

 AWS Glue的 Iceberg REST 端點支援 Apache Iceberg REST 規格中指定的 API 操作。使用 Iceberg REST 用戶端，您可以將在分析引擎上執行的應用程式連線到 Data Catalog 中託管的 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 APIs：
+ GetConfig
+ ListNamespaces
+ CreateNamespace
+ LoadNamespaceMetadata
+ UpdateNamespaceProperties
+ DeleteNamespace
+ ListTables
+ CreateTable
+ LoadTable
+ TableExists
+ UpdateTable
+ DeleteTable

## 字首和目錄路徑參數
<a name="prefix-catalog-path-parameters"></a>

Iceberg REST 目錄 API 在其請求 URL 中具有自由格式字首。例如，`ListNamespaces`API 呼叫使用 `GET/v1/{prefix}/namespaces` URL format. AWS Glue prefix 一律遵循 `/catalogs/{catalog}`結構，以確保 REST 路徑符合 AWS Glue 多目錄階層。可以根據下列規則衍生 `{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  | 

只有在您直接呼叫 REST API 時，才需要此目錄 ID 至字首映射。當您透過 引擎使用 AWS Glue Iceberg REST 目錄 APIs 時，您需要在 Iceberg REST AWS Glue 目錄 API 設定的 `warehouse` 參數中指定目錄 ID，或在 AWS Glue 延伸 API 設定的 `glue.id` 參數中指定目錄 ID。例如，請參閱[將 Iceberg 叢集與 Spark 搭配使用](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-spark-cluster.html)，以了解如何將其與 EMR Spark 搭配使用。

## 命名空間路徑參數
<a name="ns-path-param"></a>

Iceberg REST 目錄 API 路徑中的命名空間可以具有多個層級。但是， AWS Glue 僅支援單一層級命名空間。若要存取多層目錄階層中的命名空間，您可以連線到命名空間上方的多層目錄，以參考命名空間。這允許支援 的 3 部分表示法的任何查詢引擎`catalog.namespace.table`存取多層級目錄階層中的物件 AWS Glue，與使用多層級命名空間相比，沒有相容性問題。