

# Conectar ao Catálogo de Dados usando o endpoint REST do Iceberg do AWS Glue
<a name="connect-glu-iceberg-rest"></a>

 O endpoint REST do Iceberg do AWS Glue oferece suporte a operações de API definidas na especificação REST do Apache Iceberg. Usando um cliente REST do Iceberg, é possível conectar sua aplicação em execução em um mecanismo de análise ao catálogo REST hospedado no Catálogo de Dados.

 O endpoint oferece suporte às especificações v1 e v2 das tabelas do Apache Iceberg, sendo v2 a padrão. Ao usar a especificação v1 das tabelas do Iceberg, será necessário especificar v1 na chamada da API. Usando a operação da API, você é possível acessar tabelas do Iceberg residentes no armazenamento de objetos do Amazon S3 e no armazenamento de tabelas do Amazon S3. 

**Configuração do endpoint**

É possível acessar o catálogo REST do AWS Glue Iceberg usando o endpoint do serviço. Consulte o [Guia de referência dos endpoints de serviço do AWS Glue](https://docs.aws.amazon.com/general/latest/gr/glue.html#glue_region) para o endpoint específico da região. Por exemplo, ao se conectar ao AWS Glue na região us-east-1, você precisará configurar a propriedade URI do endpoint da seguinte forma: 

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

**Propriedades de configuração adicionais**: ao usar o cliente do Iceberg para conectar um mecanismo de análise como o Spark ao endpoint de serviço, é necessário especificar as seguintes propriedades de configuração da aplicação:

```
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()
```

O endpoint do Iceberg ` https://glue.us-east-1.amazonaws.com/iceberg` do AWS Glue é compatível com as seguintes APIs REST do Iceberg:
+ GetConfig
+ ListNamespaces
+ CreateNamespace
+ LoadNamespaceMetadata
+ UpdateNamespaceProperties
+ DeleteNamespace
+ ListTables
+ CreateTable
+ LoadTable
+ TableExists
+ UpdateTable
+ DeleteTable

## Parâmetros de prefixo e caminho do catálogo
<a name="prefix-catalog-path-parameters"></a>

As APIs do catálogo REST do Iceberg têm um prefixo de formato livre em seus URLs de solicitação. Por exemplo, a chamada de API `ListNamespaces` usa o formato de URL `GET/v1/{prefix}/namespaces`. O prefixo AWS Glue sempre segue a estrutura `/catalogs/{catalog}` para garantir que o caminho REST alinhe a hierarquia de múltiplos catálogos do AWS Glue. O parâmetro de caminho `{catalog}` pode ser derivado com base nas seguintes regras:


| **Padrão de acesso** |  **Estilo de ID do catálogo do Glue**  |  **Estilo de prefixo**  | **Exemplo de ID de catálogo padrão** |  **Exemplo de rota REST**  | 
| --- | --- | --- | --- | --- | 
|  Acesar o catálogo padrão na conta atual  | não obrigatório | : |  não aplicável  |  GET /v1/catalogs/:/namespaces  | 
|  Acessar o catálogo padrão em uma conta específica  | accountID | accountID | 111122223333 | GET /v1/catalogs/111122223333/namespaces | 
|  Acesar um catálogo aninhado na conta atual  |  catalog1/catalog2  |  catalog1/catalog2  |  rmscatalog1:db1  |  GET /v1/catalogs/rmscatalog1:db1/namespaces  | 
|  Acessar um catálogo aninhado em uma conta específica  |  accountId:catalog1/catalog2  |  accountId:catalog1/catalog2  |  123456789012/rmscatalog1:db1  |  GET /v1/catalogs/123456789012:rmscatalog1:db1/namespaces  | 

Esse mapeamento de ID de catálogo em prefixo é necessário somente quando você chama diretamente as APIs REST. Ao trabalhar com as APIs do catálogo REST do Iceberg do AWS Glue por meio de um mecanismo, é necessário especificar o ID do catálogo do AWS Glue no parâmetro `warehouse` da configuração da API do catálogo REST do Iceberg ou no parâmetro `glue.id` da configuração da API de extensões do AWS Glue. Por exemplo, veja como você pode usá-lo com o EMR Spark em [Usar um cluster do Iceberg com o Spark](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-spark-cluster.html).

## Parâmetro do caminho do namespace
<a name="ns-path-param"></a>

Os namespaces no caminho das APIs do catálogo REST do Iceberg podem ter vários níveis. No entanto, o AWS Glue só oferece suporte a namespaces de nível único. Para acessar um namespace em uma hierarquia de catálogos de vários níveis, é possível se conectar a um catálogo de vários níveis acima do namespace para fazer referência ao namespace. Isso permite que qualquer mecanismo de consulta que suporte a notação em três partes de `catalog.namespace.table` acesse objetos na hierarquia de catálogos de vários níveis do AWS Glue sem problemas de compatibilidade em comparação com o uso do namespace de vários níveis.