

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

# Registrare cataloghi di bucket di tabelle S3 e consultare le tabelle di Athena
<a name="gdc-register-s3-table-bucket-cat"></a>

I bucket di tabelle Amazon S3 sono un tipo di bucket in Amazon S3 progettato appositamente per archiviare dati tabulari nelle tabelle Apache Iceberg. I bucket di tabella automatizzano le attività di gestione delle tabelle come la compattazione, la gestione delle istantanee e la rimozione di oggetti inutili per ottimizzare continuamente le prestazioni delle query e ridurre al minimo i costi. Sia per chi è agli inizi sia per chi ha migliaia di tabelle nel proprio ambiente Iceberg, i bucket di tabella semplificano i data lake a qualsiasi dimensione. Per ulteriori informazioni sui bucket, consultare [Bucket di tabella](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html).

## Considerazioni e limitazioni
<a name="gdc-register-s3-table-consideration"></a>
+ Tutte le operazioni DDL supportate per le tabelle Iceberg sono supportate anche per le tabelle S3 con le seguenti eccezioni:
  + `ALTER TABLE RENAME`, `CREATE VIEW` e `ALTER DATABASE` non sono supportate.
  + `OPTIMIZE` e `VACUUM`: è possibile controllare compattazione e la gestione delle istantanee in S3. Per ulteriori informazioni, consultare [Documentazione per la manutenzione di Tabelle S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html).
+ Le query DDL sulle tabelle S3 registrate come origini dati Athena non sono supportate.
+ Il riutilizzo dei risultati delle query non è supportato.
+ Nei gruppi di lavoro con SSE-KMS, crittografia CSE-KMS abilitata, non è possibile eseguire operazioni di scrittura come`INSERT`, `UPDATE`, `DELETE` o `MERGE` su tabelle S3.
+ Nei gruppi di lavoro con l’opzione S3 Requester Pays abilitata, non è possibile eseguire operazioni DML su tabelle S3.

## Eseguire query su tabelle S3 da Athena
<a name="gdc-register-s3-table-prereq-setup"></a>

**Completare questi passaggi preliminari prima di eseguire query su Tabelle S3 in Athena**

1. Creare un bucket per tabelle S3 Per ulteriori informazioni, consultare [Creazione di un bucket per tabelle](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html) nella Guida per l’utente di Amazon Simple Storage Service. 

1. Assicurati che l'integrazione dei tuoi secchielli da tavolo con abbia successo. AWS Glue Data Catalog Per le autorizzazioni e i passaggi di configurazione richiesti, consulta [Prerequisiti per l'integrazione di S3 Tables](https://docs.aws.amazon.com/glue/latest/dg/s3tables-catalog-prerequisites.html) e [Enabling S3 Tables integration con Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/enable-s3-tables-catalog-integration.html) nella Developer Guide. AWS Glue 

1. Per il principale che usi per eseguire le query con Athena, concedi le autorizzazioni sul catalogo S3 Table utilizzando uno dei seguenti approcci: 

   **Opzione 1: utilizza le autorizzazioni IAM**

   Quando si utilizza il controllo degli accessi IAM, il principale necessita delle autorizzazioni sia per le risorse che per AWS Glue Data Catalog le risorse di Amazon S3 Tables.

   L'elenco seguente contiene tutte le `s3tables` autorizzazioni necessarie per eseguire qualsiasi operazione DDL o DML supportata sulle tabelle S3 in Athena:
   + `s3tables:GetTableBucket`
   + `s3tables:GetNamespace`
   + `s3tables:GetTable`
   + `s3tables:GetTableData`
   + `s3tables:PutTableData`
   + `s3tables:ListNamespaces`
   + `s3tables:ListTables`
   + `s3tables:DeleteNamespace`
   + `s3tables:DeleteTable`
   + `s3tables:CreateNamespace`
   + `s3tables:CreateTable`
   + `s3tables:UpdateTableMetadataLocation`

   Applica queste autorizzazioni a specifiche risorse S3 table bucket e S3 Table o usale `*` come risorsa per concedere l'accesso a tutti i table bucket e le tabelle del tuo account. Queste autorizzazioni possono essere combinate con la politica [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html)gestita per abilitare funzionalità complete.

   **Opzione 2: utilizzare le autorizzazioni di Lake Formation**

   In alternativa, per abilitare un controllo granulare degli accessi, puoi concedere le autorizzazioni di Lake Formation sul catalogo S3 Table, tramite la console Lake Formation o. AWS CLI Ciò richiede la registrazione dei bucket di tabella S3 come posizione dati di Lake Formation. Per ulteriori informazioni, consulta la sezione [Creazione di un catalogo Amazon S3 Tables AWS Glue Data Catalog nella](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) Lake Formation Developer Guide.

------
#### [ Console di gestione AWS ]

   1. Apri la AWS Lake Formation console all'indirizzo [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) e accedi come amministratore del data lake. Per ulteriori informazioni su come creare un amministratore di data lake, consulta [Creare un amministratore di data lake](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin).

   1. Nel riquadro di navigazione scegli **Autorizzazioni dati**, quindi seleziona **Concedi**. 

   1. Nella pagina **Concedi autorizzazioni**, in **Principali**, scegliere il principale che si desidera utilizzare per inviare la query da Athena.

   1. In **LF-Tags o risorse del catalogo**, scegli **Risorse Catalogo dati denominato**.

   1. Per **Cataloghi**, scegli un catalogo di dati di Glue creato dall'integrazione del proprio bucket di tabelle. Ad esempio, *<accoundID>* :s3tablescatalog/. *amzn-s3-demo-bucket*

   1. Per le **Autorizzazioni del catalogo**, scegliere **Super**.

   1. Scegliere **Concedi**.

------
#### [ AWS CLI ]

   Eseguire il comando seguente con il ruolo di amministratore del data lake di Lake Formation per concedere l’accesso al principale utilizzato per inviare la query da Athena. 

   ```
   aws lakeformation grant-permissions \
   --region <region (Example,us-east-1)> \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "<user or role ARN (Example, arn:aws:iam::<Account ID>:role/ExampleRole>"
       },
       "Resource": {
           "Catalog": {
               "Id":"<Account ID>:s3tablescatalog/amzn-s3-demo-bucket"
           }
       },
       "Permissions": ["ALL"]
   }'
   ```

------

**Inviare query per Tabelle S3**

1. Inviare una query `CREATE DATABASE` da Athena con l’utente/ruolo di cui sopra. In questo esempio, `s3tablescatalog` è il Catalogo dati Glue principale creato dall’integrazione e ` s3tablescatalog/amzn-s3-demo-bucket` è il Catalogo dati Glue secondario creato per ogni bucket di tabelle S3. Esistono due modi per eseguire una query.

------
#### [ Option 1 ]

   Specificare il file secondario Glue Data Catalog (`s3tablescatalog/amzn-s3-demo-bucket`) direttamente dalla console o AWS CLI.

   **Usando Console di gestione AWS**

   1. Apri la console Athena all'indirizzo [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Nella barra di navigazione a sinistra, per **Nome dell'origine dati**, scegli **AwsDataCatalog**.

   1. Per **Catalog**, scegli ***amzn-s3-demo-bucket*s3tablescatalog/**.

   1. Nell’editor di query, inserire una query come `CREATE DATABASE test_namespace`.

   **Usando AWS CLI**

   Eseguire il seguente comando seguente.

   ```
   aws athena start-query-execution \ 
   --query-string 'CREATE DATABASE `test_namespace`' \ 
   --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket"}' \
   --work-group "primary"
   ```

------
#### [ Option 2 ]

   Creare il catalogo dati Athena dal Catalogo dati Glue secondario nella console Athena e specificarlo come catalogo nella query. Per ulteriori informazioni, consulta [Registrare i cataloghi di bucket di tabelle S3 come origini dati Athena](#gdc-register-s3-table-console-steps).

------

1. Con il database creato nel passaggio precedente, utilizzare `CREATE TABLE` per creare una tabella. L’esempio seguente crea una tabella nel database *`test_namespace`* creato in precedenza nel catalogo Glue `s3tablescatalog/amzn-s3-demo-bucket`.

------
#### [ Console di gestione AWS ]

   1. Nella barra di navigazione a sinistra, per **Nome dell'origine dati**, scegli **AwsDataCatalog**.

   1. Per **Catalog**, scegli ***amzn-s3-demo-bucket*s3tablescatalog/**.

   1. Per **Database**, scegli **test\$1namespace**.

   1. Nell’editor di query, eseguire la seguente query.

      ```
      CREATE TABLE daily_sales (
              sale_date date,
              product_category
              string, sales_amount double)
      PARTITIONED BY (month(sale_date))
      TBLPROPERTIES ('table_type' = 'iceberg')
      ```

------
#### [ AWS CLI ]

   Eseguire il seguente comando seguente.

   ```
   aws athena start-query-execution \
   --query-string "CREATE TABLE daily_sales (
           sale_date date,
           product_category
           string, sales_amount double)
   PARTITIONED BY (month(sale_date))
   TBLPROPERTIES ('table_type' = 'iceberg')" \
   --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket", "Database":"test_namespace"}' \
   --work-group "primary"
   ```

------

1. Inserire i dati nella tabella creata nel passaggio precedente.

------
#### [ Console di gestione AWS ]

   1. Nella barra di navigazione a sinistra, per Nome dell'origine **dati**, scegli. **AwsDataCatalog**

   1. Per **Catalog**, scegli ***amzn-s3-demo-bucket*s3tablescatalog/**.

   1. Per **Database**, scegli **test\$1namespace**.

   1. Nell’editor di query, eseguire la seguente query.

      ```
      INSERT INTO daily_sales
      VALUES 
          (DATE '2024-01-15', 'Laptop', 900.00),
          (DATE '2024-01-15', 'Monitor', 250.00),
          (DATE '2024-01-16', 'Laptop', 1350.00),
          (DATE '2024-02-01', 'Monitor', 300.00);
      ```

------
#### [ AWS CLI ]

   Eseguire il seguente comando.

   ```
   aws athena start-query-execution \
   --query-string "INSERT INTO \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales
   VALUES 
   (DATE '2024-01-15', 'Laptop', 900.00),
   (DATE '2024-01-15', 'Monitor', 250.00),
   (DATE '2024-01-16', 'Laptop', 1350.00),
   (DATE '2024-02-01', 'Monitor', 300.00)"\ 
   --work-group "primary"
   ```

------

1. Dopo aver inserito i dati nella tabella, è possibile eseguirci una query.

------
#### [ Console di gestione AWS ]

   1. Nella barra di navigazione a sinistra, per Nome dell'origine **dati**, scegli. **AwsDataCatalog**

   1. Per **Catalog**, scegli ***amzn-s3-demo-bucket*s3tablescatalog/**.

   1. Per **Database**, scegli **test\$1namespace**.

   1. Nell’editor di query, eseguire la seguente query.

      ```
      SELECT
          product_category,
          COUNT(*) AS units_sold,
          SUM(sales_amount) AS total_revenue,
          AVG(sales_amount) AS average_price
      FROM
          daily_sales
      WHERE
          sale_date BETWEEN DATE '2024-02-01' 
                       AND DATE '2024-02-29'
      GROUP BY
          product_category
      ORDER BY
          total_revenue DESC
      ```

------
#### [ AWS CLI ]

   Eseguire il seguente comando seguente.

   ```
   aws athena start-query-execution \
   --query-string "SELECT product_category,
       COUNT(*) AS units_sold,
       SUM(sales_amount) AS total_revenue,
       AVG(sales_amount) AS average_price
   FROM \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales
   WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29'
   GROUP BY product_category
   ORDER BY total_revenue DESC"\
   --work-group "primary"
   ```

------

## Creare tabelle S3 in Athena
<a name="gdc-create-s3-tables-athena"></a>

Athena supporta la creazione di tabelle nei namespace di tabelle S3 esistenti o nei namespace creati in Athena con istruzioni `CREATE DATABASE`. Per creare una tabella S3 da Athena, la sintassi è la stessa di quando si [crea una normale tabella Iceberg](querying-iceberg-creating-tables.md), tranne che non si specifica il `LOCATION`, come mostrato nell’esempio seguente.

```
CREATE TABLE
[db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] )
[PARTITIONED BY (col_name | transform, ... )]
[TBLPROPERTIES ([, property_name=property_value] )]
```

È possibile creare anche tabelle S3 utilizzando le istruzioni CREATE TABLE AS SELECT (CTAS). Per ulteriori informazioni, consulta [CTAS per tabelle S3](#ctas-s3-tables).

## Registrare i cataloghi di bucket di tabelle S3 come origini dati Athena
<a name="gdc-register-s3-table-console-steps"></a>

Per registrare i cataloghi di bucket di tabelle S3 con la console Athena, completare i seguenti passaggi.

1. Apri la console Athena all'indirizzo [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

1. Nel pannello di navigazione scegliere **Origini dati e cataloghi**.

1. Nella pagina **Origini dati e cataloghi**, scegliere **Crea origine dati**.

1. Per **Scegli un'origine dati**, selezionare **Amazon S3 - AWS Glue Data Catalog**.

1. Nella sezione **AWS Glue Data Catalog**, per **Account di origine dati**, scegliere **AWS Glue Data Catalog in questo account**.

1. **Per **Crea una tabella o registra un catalogo, scegli Registra un nuovo catalogo**. AWS Glue **

1. Nella sezione **Dettagli origine dati**, per **Nome origine dati)**, inserire il nome che si desidera utilizzare per specificare l’origine dati nelle query SQL o utilizzare il nome predefinito che viene generato.

1. Per **Catalogo**, scegli **Sfoglia** per cercare un elenco di AWS Glue cataloghi nello stesso account. Se non si vede alcun catalogo esistente, crearne uno nella [console AWS Glue](https://console.aws.amazon.com/glue/). 

1. **Nella finestra di dialogo **Sfoglia AWS Glue cataloghi**, selezionate il catalogo che desiderate utilizzare, quindi scegliete Scegli.**

1. (Facoltativo) Per i **tag**, inserite key/value le coppie che desiderate associare all'origine dati.

1. Scegli **Next (Successivo)**.

1. Nella pagina **Rivedi e crea**, esaminare le informazioni inserite, quindi scegliere **Crea origine dati**.

## CTAS per tabelle S3
<a name="ctas-s3-tables"></a>

Amazon Athena ora supporta le operazioni CREATE TABLE AS SELECT (CTAS) per le tabelle S3. Questa funzionalità consente di creare nuove tabelle S3 in base ai risultati di una query SELECT. 

Quando si crea una query CTAS per una tabella S3, ci sono alcune importanti differenze rispetto alle tabelle Athena standard:
+ È necessario omettere la proprietà posizione perché le tabelle S3 gestiscono automaticamente le proprie posizioni di archiviazione.
+ La proprietà `table_type` è impostata su `ICEBERG`, quindi non è necessario specificarla esplicitamente nella query.
+ Se non si specifica un formato, il sistema utilizza automaticamente `PARQUET` come formato predefinito per i dati.
+ Tutte le altre proprietà seguono la stessa sintassi delle normali tabelle Iceberg.

Prima di creare tabelle S3 utilizzando CTAS, assicurati di avere le autorizzazioni necessarie configurate in IAM o. AWS Lake Formation In particolare, sono necessarie le autorizzazioni per creare tabelle nel catalogo Tabelle S3. Senza queste autorizzazioni, le operazioni CTAS falliranno.

**Nota**  
Se una query CTAS fallisce, potrebbe essere necessario eliminare la tabella utilizzando l’[API Tabelle S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-delete.html) prima di tentare di rieseguire la query. Non è possibile usare le istruzioni Athena `DROP TABLE` per rimuovere la tabella che è stata parzialmente creata dalla query. 

**Esempio**

```
CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name"
WITH (
    format = 'PARQUET'
)
AS SELECT *
FROM source_table;
```