

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Accesso alle tabelle utilizzando l’endpoint Iceberg REST di Tabelle Amazon S3
<a name="s3-tables-integrating-open-source"></a>

È possibile collegare il client Iceberg REST all’endpoint Iceberg REST di Tabelle Amazon S3 ed effettuare chiamate REST API per creare, aggiornare o sottoporre a query le tabelle nei bucket di tabelle S3. [L'endpoint implementa un set di standard specificati nella specifica dell'API Catalog Open Iceberg REST APIs . Apache Iceberg REST](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml) L’endpoint funziona traducendo le operazioni Iceberg REST API nelle corrispondenti operazioni di Tabelle S3.

**Nota**  
L'Iceberg RESTendpoint Amazon S3 Tables può essere utilizzato per accedere alle tabelle nelle implementazioni del catalogo AWS Partner Network (APN) o alle implementazioni di cataloghi personalizzati. Può essere utilizzato anche se è necessario solo l' read/write accesso di base a un singolo bucket di tabelle. Per altri scenari di accesso, consigliamo di utilizzare l' AWS Glue Iceberg RESTendpoint per connettersi alle tabelle, che fornisce una gestione unificata delle tabelle, una governance centralizzata e un controllo granulare degli accessi. Per ulteriori informazioni, consulta [Accesso alle tabelle Amazon S3 utilizzando l’endpoint AWS Glue Iceberg REST](s3-tables-integrating-glue-endpoint.md)

## Configurazione dell’endpoint
<a name="configure-endpoint"></a>

Ci si connette all’endpoint Iceberg REST di Tabelle Amazon S3 utilizzando l’endpoint del servizio. Gli endpoint Iceberg REST di Tabelle S3 hanno il formato seguente:

```
https://s3tables.<REGION>.amazonaws.com/iceberg
```

Fai riferimento a [Tabelle ed endpoint S3 Regioni AWS](s3-tables-regions-quotas.md#s3-tables-regions) per gli endpoint specifici della Regione.

**Proprietà della configurazione del catalogo**

Quando si utilizza un client Iceberg per connettere un motore di analisi all’endpoint del servizio, è necessario specificare le seguenti proprietà di configurazione quando si inizializza il catalogo. Sostituiscili {{placeholder values}} con le informazioni relative alla tua regione e al tuo bucket di tabella.
+ L’endpoint specifico della Regione come l’URI dell’endpoint: `https://s3tables.<REGION>.amazonaws.com/iceberg`
+ L’ARN del bucket di tabelle come posizione del warehouse: `arn:aws:s3tables:<region>:<accountID>:bucket/<bucketname>`
+ Proprietà Sigv4 per l’autenticazione. Il nome di firma SigV4 per le richieste degli endpoint del servizio è: `s3tables`

I seguenti esempi illustrano come configurare client diversi per utilizzare l’endpoint Iceberg REST di Tabelle Amazon S3.

------
#### [ PyIceberg ]

Per utilizzare l’endpoint Iceberg REST di Tabelle Amazon S3 con PyIceberg, specifica le seguenti proprietà di configurazione dell’applicazione:

```
rest_catalog = load_catalog(
  catalog_name,
  **{
    "type": "rest",    
    "warehouse":"arn:aws:s3tables:{{<Region>:<accountID>}}:bucket/{{<bucketname>}}",
    "uri": "https://s3tables.{{<Region>}}.amazonaws.com/iceberg",
    "rest.sigv4-enabled": "true",
    "rest.signing-name": "s3tables",
    "rest.signing-region": "{{<Region>}}"
  }
)
```

------
#### [ Apache Spark ]

Per utilizzare l'Iceberg RESTendpoint Amazon S3 Tables conSpark, specifica le seguenti proprietà di configurazione dell'applicazione, sostituendole {{placeholder values}} con le informazioni relative alla regione e al bucket di tabella.

```
spark-shell \
  --packages "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160,software.amazon.awssdk:url-connection-client:2.20.160" \
  --master "local[*]" \
  --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://s3tables.{{<Region>}}.amazonaws.com/iceberg" \
  --conf "spark.sql.catalog.spark_catalog.warehouse=arn:aws:s3tables:{{<Region>:<accountID>}}:bucket/{{<bucketname>}}" \
  --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \
  --conf "spark.sql.catalog.spark_catalog.rest.signing-name=s3tables" \
  --conf "spark.sql.catalog.spark_catalog.rest.signing-region={{<Region>}}" \
  --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" \
  --conf "spark.sql.catalog.spark_catalog.rest-metrics-reporting-enabled=false"
```

------

## Autenticazione e autorizzazione dell’accesso all’endpoint
<a name="tables-endpoint-auth"></a>

Le richieste API agli endpoint del servizio S3 Tables vengono autenticate utilizzando AWS Signature Version 4 (SigV4). Consulta [AWS Signature Version 4 per le richieste API per saperne](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) di più su SigV4. AWS 

Il nome di firma SigV4 per le richieste degli endpoint Iceberg REST di Tabelle Amazon S3 è: `s3tables`

Le richieste all’endpoint Iceberg REST di Tabelle Amazon S3 sono autorizzate utilizzando azioni IAM `s3tables` che corrispondono alle operazioni REST API. Queste autorizzazioni possono essere definite in policy basate su identità IAM o in policy basate su risorse collegate a tabelle e bucket di tabelle. Per ulteriori informazioni, consulta [Gestione degli accessi per Tabelle S3](s3-tables-setting-up.md).

 È possibile monitorare le richieste effettuate alle tabelle tramite l’endpoint REST con AWS CloudTrail. Le richieste verranno registrate nei log come azioni IAM S3 corrispondenti. Ad esempio, un’API `LoadTable` genererà un evento di gestione per l’operazione `GetTableMetadataLocation` e un evento di dati per l’operazione `GetTableData`. Per ulteriori informazioni, consulta [Registrazione con AWS CloudTrail per S3 Tables](s3-tables-logging.md). 

## Prefisso e parametri di percorso
<a name="endpoint-parameter"></a>

 Iceberg REST APIs i cataloghi hanno un prefisso in formato libero nella richiesta. URLs Ad esempio, la chiamata API `ListNamespaces` utilizza il formato URL `GET/v1/{prefix}/namespaces`. Per Tabelle S3, il `{prefix}` del percorso REST è sempre l’ARN del bucket di tabelle con codifica URL. 

Ad esempio, per il seguente ARN di bucket di tabelle: `arn:aws:s3tables:{{us-east-1}}:111122223333:bucket/{{bucketname}}` il prefisso sarebbe: `arn%3Aaws%3As3tables%3A{{us-east-1}}%3A{{111122223333}}%3Abucket%2F{{bucketname}}` 

### Parametro del percorso namespace
<a name="endpoint-parameter-namespace"></a>

 I namespace in un percorso API del catalogo Iceberg REST possono avere più livelli. Tuttavia, Tabelle S3 supporta solo namespace con un singolo livello. Per accedere a un namespace in una gerarchia di cataloghi con più livelli, è possibile connettersi a un catalogo con più livelli sopra il namespace per fare riferimento al namespace. Ciò consente a qualsiasi motore di query che supporti la notazione in tre parti `catalog.namespace.table` di accedere agli oggetti nella gerarchia del catalogo di Tabelle S3 senza problemi di compatibilità rispetto all’utilizzo del namespace multilivello. 

## Operazioni Iceberg REST API supportate
<a name="endpoint-supported-api"></a>

La tabella seguente contiene i REST di Iceberg supportati APIs e il modo in cui corrispondono alle azioni di S3 Tables. 


| Operazione Iceberg REST | Percorso REST | Azione IAM di Tabelle S3 | CloudTrail EventName | 
| --- | --- | --- | --- | 
| `getConfig` | `GET /v1/config` | `s3tables:GetTableBucket` | `s3tables:GetTableBucket` | 
| `listNamespaces` | `GET /v1/{prefix}/namespaces` | `s3tables:ListNamespaces` | `s3tables:ListNamespaces` | 
| `createNamespace` | `POST /v1/{prefix}/namespaces` | `s3tables:CreateNamespace` | `s3tables:CreateNamespace` | 
| `loadNamespaceMetadata` | `GET /v1/{prefix}/namespaces/{namespace}` | `s3tables:GetNamespace` | `s3tables:GetNamespace` | 
| `dropNamespace` | `DELETE /v1/{prefix}/namespaces/{namespace}` | `s3tables:DeleteNamespace` | `s3tables:DeleteNamespace` | 
| `listTables` | `GET /v1/{prefix}/namespaces/{namespace}/tables` | `s3tables:ListTables` | `s3tables:ListTables` | 
| `createTable` | `POST /v1/{prefix}/namespaces/{namespace}/tables` | `s3tables:CreateTable`, `s3tables:PutTableData` | `s3tables:CreateTable`, `s3tables:PutObject` | 
| `loadTable` | `GET /v1/{prefix}/namespaces/{namespace}/tables/{table}` | `s3tables:GetTableMetadataLocation`, `s3tables:GetTableData` | `s3tables:GetTableMetadataLocation`, `s3tables:GetObject` | 
| `updateTable` | `POST /v1/{prefix}/namespaces/{namespace}/tables/{table}` | `s3tables:UpdateTableMetadataLocation`, `s3tables:PutTableData`, `s3tables:GetTableData` | `s3tables:UpdateTableMetadataLocation`, `s3tables:PutObject`, `s3tables:GetObject` | 
| `dropTable` | `DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}` | `s3tables:DeleteTable` | `s3tables:DeleteTable` | 
| `renameTable` | `POST /v1/{prefix}/tables/rename` | `s3tables:RenameTable` | `s3tables:RenameTable` | 
| `tableExists` | `HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table}` | `s3tables:GetTable` | `s3tables:GetTable` | 
| `namespaceExists` | `HEAD /v1/{prefix}/namespaces/{namespace}` | `s3tables:GetNamespace` | `s3tables:GetNamespace` | 

## Considerazioni e limitazioni
<a name="endpoint-considerations"></a>

Di seguito sono riportate le considerazioni e le limitazioni relative all’utilizzo dell’endpoint Iceberg REST di Tabelle Amazon S3.

****Considerazioni****
+ **CreateTable Comportamento dell'API**: `stage-create` l'opzione non è supportata per questa operazione e genera un `400 Bad Request` errore. Ciò significa che non è possibile creare una tabella dai risultati della query utilizzando `CREATE TABLE AS SELECT` (CTAS).
+ **DeleteTable Comportamento delle API**: è possibile eliminare le tabelle solo con l'eliminazione abilitata. L’eliminazione di tabelle con `purge=false` non è supportata e genera un errore `400 Bad Request`. Alcune versioni di Spark impostano sempre questo flag su false anche quando eseguono i comandi `DROP TABLE PURGE`. Puoi provare `DROP TABLE PURGE` o utilizzare l'[DeleteTable](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3TableBuckets_DeleteTable.html)operazione S3 Tables per eliminare una tabella.
+  L’endpoint supporta solo le operazioni standard sui metadati delle tabelle. Per la manutenzione delle tabelle, come la gestione e la compattazione di snapshot, utilizza le operazioni API di manutenzione di Tabelle S3. Per ulteriori informazioni, consulta [Manutenzione di Tabelle S3](s3-tables-maintenance-overview.md). 

****Limitazioni****
+ I namespace multilivello non sono supportati.
+ OAuthl'autenticazione basata non è supportata.
+ Solo la proprietà `owner` è supportata per i namespace.
+ I dati relativi alla visualizzazione APIs definiti nella [specifica Apache Iceberg REST Open API](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml) non sono supportati.
+ L'esecuzione di operazioni su una tabella con un `metadata.json` file di dimensioni superiori a 50 MB non è supportata e restituirà un errore. `400 Bad Request` Per controllare la dimensione dei file `metadata.json`, utilizza le operazioni di manutenzione delle tabelle. Per ulteriori informazioni, consulta [Manutenzione di Tabelle S3](s3-tables-maintenance-overview.md).