

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à.

# Creazione di una tabella di Amazon S3
<a name="s3-tables-create"></a>

Una tabella Amazon S3 è una sottorisorsa di un bucket di tabelle. Le tabelle sono archiviate nel formato Apache Iceberg in modo da poterle utilizzare con motori di query e altre applicazioni che supportano Apache Iceberg. Amazon S3 ottimizza continuamente le tabelle per ridurre i costi di archiviazione e migliorare le prestazioni delle query di analisi.

Quando si crea una tabella, Amazon S3 genera automaticamente la relativa *posizione nel warehouse*. La posizione del warehouse è una posizione S3 univoca in cui è possibile leggere e scrivere oggetti associati alla tabella. Nell'esempio seguente viene illustrato il formato di una posizione del warehouse:

```
s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3
```

Il nome della risorsa Amazon (ARN) per le tabelle ha il seguente formato:

```
arn:aws:s3tables:{{region}}:{{owner-account-id}}:bucket/{{bucket-name}}/table/{{table-id}}
```

Per impostazione predefinita, puoi creare fino a 10.000 tabelle in un bucket di tabelle. Per richiedere un aumento della quota per i bucket di tabelle o le tabelle, contattare [Supporto](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase).

Puoi creare una tabella utilizzando la console Amazon S3, l'API REST di Amazon S3, AWS gli SDK AWS Command Line Interface (AWS CLI) o i motori di query collegati ai tuoi bucket di tabelle.

Quando si crea una tabella, è possibile specificare le relative impostazioni di crittografia, a meno che non si stia utilizzando Athena. Se non si specificano le impostazioni di crittografia, la tabella viene crittografata con le impostazioni predefinite per il bucket di tabelle. Per ulteriori informazioni, consulta [Specifica della crittografia per tabelle](s3-tables-kms-specify.md#specify-kms-table).

**Prerequisiti per la creazione di tabelle**

Per creare una tabella, è necessario procedere come segue: 
+ [Creare un bucket di tabelle](s3-tables-buckets-create.md).
+ [Creare un namespace](s3-tables-namespace-create.md) nel bucket di tabelle.
+ Assicurati di disporre delle autorizzazioni AWS Identity and Access Management (IAM) per e. `s3tables:CreateTable` `s3tables:PutTableData`
+ 
**Nota**  
Se utilizzi la SSE-KMS crittografia per la tua tabella, hai bisogno delle autorizzazioni e `DescribeKey` delle autorizzazioni per `s3tables:PutTableEncryption` la chiave scelta AWS KMS . Inoltre, la AWS KMS chiave utilizzata deve concedere a S3 Tables l'autorizzazione per eseguire la manutenzione automatica della tabella. Per ulteriori informazioni, consulta [Requisiti di autorizzazione per la crittografia delle tabelle S3 SSE-KMS](s3-tables-kms-permissions.md)

Per ulteriori informazioni sui nomi di tabella validi, consulta [Regole di denominazione per tabelle e spazi dei nomi](s3-tables-buckets-naming.md#naming-rules-table).

**Importante**  
Durante la creazione delle tabelle, è necessario utilizzare solo lettere minuscole nei nomi delle tabelle e nelle definizioni delle tabelle. Ad esempio, è necessario verificare che i nomi delle colonne siano tutti in minuscolo. Se il nome o la definizione della tabella contiene lettere maiuscole, la tabella non è supportata da AWS Lake Formation o da. AWS Glue Data Catalog In questo caso, la tabella non sarà visibile ai servizi di AWS analisi come Amazon Athena, anche se i bucket di tabelle sono integrati con i servizi di AWS analisi.   
Se la definizione della tabella contiene lettere maiuscole, riceverai il seguente messaggio di errore quando esegui una `SELECT` query in Athena:  «GENERIC\_INTERNAL\_ERROR: Get table request failed: com.amazonaws.services.glue.model. ValidationException: Risorsa federativa non supportata: nomi di tabella o colonna non validi.» 

## Utilizzo della console S3 e Amazon Athena
<a name="create-table-console"></a>

La procedura seguente utilizza la console di Amazon S3 per creare una tabella con Amazon Athena. Se non è ancora stato creato un namespace nel bucket di tabelle, è possibile farlo come parte di questo processo. Prima di eseguire i seguenti passaggi, assicurati di aver integrato i bucket di tabelle con i servizi di analisi AWS nella Regione in uso. Per ulteriori informazioni, consulta [Integrazione di Amazon S3 Tables con AWS servizi di analisi](s3-tables-integrating-aws.md).

**Nota**  
Quando si crea una tabella utilizzando Athena, quella tabella eredita le impostazioni di crittografia predefinite dal bucket di tabelle. Per utilizzare un tipo di crittografia diverso, è necessario creare la tabella utilizzando un altro metodo.

**Per creare una tabella**

1. Accedi Console di gestione AWS e apri la console Amazon S3 all'indirizzo [ https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Nel pannello di navigazione a sinistra, scegli **Bucket di tabelle**.

1. Nella pagina **Bucket di tabelle**, scegli il bucket in cui desideri creare una tabella.

1. Nella pagina dei dettagli del bucket, scegli **Crea tabella con Athena**. 

1. Nella finestra di dialogo **Crea tabella con Athena**, effettua una delle seguenti operazioni:
   + Crea un nuovo namespace. Scegli **Crea un namespace**, quindi inserisci un nome nel campo **Nome del namespace**. I nomi dei namespace devono essere composti da un numero di caratteri compreso tra 1 e 255 ed essere univoci all’interno del bucket di tabelle. I caratteri validi sono a-z, 0-9 e i caratteri di sottolineatura (`_`). I caratteri di sottolineatura non sono consentiti all’inizio dei nomi dei namespace. 
   + Selezionare **Crea namespace**.
   + Specifica un namespace esistente. Scegli **Specifica un namespace esistente nel bucket di tabelle**. Quindi seleziona **Scegli tra namespace esistenti** o **Inserisci un nome per il namespace esistente**. Se sono presenti più di 1.000 namespace nel bucket, è necessario inserire il nome del namespace se non compare nell’elenco. 

1. Scegli **Crea tabella con Athena**.

1. Si apre la console Amazon Athena e viene visualizzato l’editor di query Athena. Il campo **Catalogo** deve essere compilato con **s3tablescatalog/** seguito dal nome del bucket di tabelle, ad esempio **s3tablescatalog/{{amzn-s3-demo-bucket}}**. Il campo **Database** deve essere compilato con il namespace creato o selezionato in precedenza. 
**Nota**  
Se non vedi questi valori nei campi **Catalogo** e **Database**, assicurati di aver integrato il bucket di tabelle gestito con i servizi di analisi AWS nella Regione in uso. Per ulteriori informazioni, consulta [Integrazione di Amazon S3 Tables con AWS servizi di analisi](s3-tables-integrating-aws.md). 

1. L’editor di query è popolato con una query di esempio da utilizzare per creare una tabella. Modifica la query per specificare il nome della tabella e le colonne della tabella. 

1. Una volta modificata la query, scegli **Esegui** per creare la tabella. 
**Nota**  
Se ricevi l’errore “Insufficient permissions to execute the query. Principal does not have any privilege on specified resource” quando provi a eseguire una query in Athena, assicurati di disporre delle necessarie autorizzazioni Lake Formation sulla tabella. Per ulteriori informazioni, consulta [Concessione dell’autorizzazione Lake Formation per una tabella o un database](grant-permissions-tables.md#grant-lf-table). 
Se ricevi l'errore  «Iceberg non può accedere alla risorsa richiesta»  quando provi a eseguire una query in Athena, accedi alla AWS Lake Formation console e assicurati di aver concesso le autorizzazioni per il catalogo e il database (namespace) della tabella che hai creato. Non specificare una tabella quando fornisci queste autorizzazioni. Per ulteriori informazioni, consulta [Concessione dell’autorizzazione Lake Formation per una tabella o un database](grant-permissions-tables.md#grant-lf-table). 
Se ricevi il seguente messaggio di errore quando esegui una `SELECT` query in Athena, questo messaggio è causato dalla presenza di lettere maiuscole nel nome della tabella o nei nomi delle colonne nella definizione della tabella:  «GENERIC\_INTERNAL\_ERROR: Get table request failed: com.amazonaws.services.glue.model. ValidationException: Risorsa federativa non supportata: nomi di tabella o colonna non validi.»  Verifica che i nomi delle tabelle e delle colonne siano tutti in minuscolo. 

Se la creazione della tabella viene completata, il nome della nuova tabella viene visualizzato nell’elenco delle tabelle in Athena. Quando torni alla console Amazon S3, la nuova tabella viene visualizzata nell’elenco **Tabelle** nella pagina dei dettagli del bucket di tabelle, dopo aver aggiornato l’elenco. 

## Utilizzo di AWS CLI
<a name="create-table-CLI"></a>

Questo esempio mostra come creare una tabella con uno schema utilizzando AWS CLI e specificando i metadati della tabella con. JSON Per utilizzare questo esempio, sostituisci `{{user input placeholders}}` con le informazioni appropriate.

```
aws s3tables create-table --cli-input-json file://{{mytabledefinition.json}}
```

Per il file `mytabledefinition.json`, utilizza la seguente definizione di tabella di esempio. Per creare una tabella partizionata, includi a nei metadati della tabella. `partitionSpec` Ogni campo di partizione fa riferimento a una colonna dello schema in base al suo valore `sourceId` e applica una trasformazione (ad esempio `identity``bucket`,`truncate`,,`year`, `month``day`, o`hour`) per produrre il valore della partizione. Poiché i campi di partizione fanno riferimento alle colonne dello schema in base all'ID, è necessario assegnare un valore esplicito `id` a ciascun campo dello schema. L'esempio seguente assegna gli ID ai campi dello schema e partiziona la tabella in base alla `registration_date` colonna utilizzando la trasformazione. `day` Per utilizzare questo esempio, sostituisci `{{user input placeholders}}` con le informazioni appropriate.

```
{
    "tableBucketARN": "arn:aws:s3tables:{{us-east-1}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket}}",
    "namespace": "{{your_namespace}}",
    "name": "{{example_table}}",
    "format": "ICEBERG",
    "metadata": {
        "iceberg": {
            "schema": {
                "fields": [
                     {"id": 1, "name": "{{id}}", "type": "{{int}}", "required": true},
                     {"id": 2, "name": "{{name}}", "type": "{{string}}"},
                     {"id": 3, "name": "{{registration_date}}", "type": "{{timestamp}}"}
                ]
            },
            "partitionSpec": {
                "specId": 0,
                "fields": [
                    {"sourceId": 3, "transform": "day", "name": "registration_day"}
                ]
            }
        }
    }
}
```

## Utilizzo di un motore di query
<a name="create-table-engine"></a>

È possibile creare una tabella in un motore di query supportato collegato ai bucket di tabelle, ad esempio in una sessione Apache Spark su Amazon EMR.

L’esempio seguente mostra come creare una tabella con Spark utilizzando istruzioni `CREATE` e come aggiungere dati della tabella utilizzando istruzioni `INSERT` o leggendo i dati da un file esistente. Per creare una tabella partizionata, aggiungete una `PARTITIONED BY` clausola all'istruzione. `CREATE` È possibile partizionare direttamente in base a una o più colonne (partizionamento dell'identità) o applicando una trasformazione della partizione come`bucket`,,,, o. `truncate` `years` `months` `days` `hours` L'esempio seguente partiziona la tabella per colonna utilizzando la `registration_date` trasformazione. `days` Per utilizzare questo esempio, sostituisci `{{user input placeholders}}` con le informazioni appropriate.

```
spark.sql(
" CREATE TABLE IF NOT EXISTS s3tablesbucket.{{example_namespace}}.`{{example_table}}` (
    id INT,
    name STRING,
    registration_date TIMESTAMP
)
USING iceberg
PARTITIONED BY (days(registration_date)) "
)
```

Dopo aver creato la tabella, è possibile caricare i dati nella tabella. Scegli tra i seguenti metodi:
+ Aggiungere i dati nella tabella utilizzando l’istruzione `INSERT`.

  ```
  spark.sql(
  """
      INSERT INTO s3tablesbucket.{{my_namespace}}.{{my_table}}
      VALUES
          (1, 'ABC', 100),
          (2, 'XYZ', 200)
  """)
  ```
+ Caricare un file di dati esistente.

  1. Leggi i dati inSpark:

     ```
     val data_file_location = "{{Path such as S3 URI to data file}}"
     val data_file = spark.read.parquet({{data_file_location}})
     ```

  1. Scrivi i dati in una Iceberg tabella:

     ```
     data_file.writeTo("s3tablesbucket.{{my_namespace}}.{{my_table}}").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()
     ```