

# 使用 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 service endpoints reference guide](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 目录 API 的请求 URL 中有一个自由格式前缀。例如，`ListNamespaces` API 调用使用 `GET/v1/{prefix}/namespaces` URL格式。AWS Glue 前缀始终遵循 `/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 目录 API 时，需要在 Iceberg REST 目录 API 设置的 `warehouse` 参数或 AWS Glue 扩展 API 设置的 `glue.id` 参数中指定 AWS Glue 目录 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 仅支持单级命名空间。要访问多级目录层次结构中的命名空间，您可以通过连接到该命名空间之上的多级目录来引用该命名空间。与使用多级命名空间相比，这样可让任何支持 `catalog.namespace.table` 三部分表示法的查询引擎访问 AWS Glue 多级目录层次结构中的对象，同时不会出现兼容性问题。