

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

# Interroga i file con SQL utilizzando Amazon Athena
<a name="tutorial-query-data-with-athena"></a>

I sistemi aziendali producono spesso output basati su file (esportazioni di log, estrazioni di transazioni, istantanee di inventario, trasferimenti di file tra sistemi) che vengono trasferiti su una condivisione di file NFS o SMB.

Con un punto di accesso Amazon S3 collegato al volume FSx for ONTAP, Amazon Athena interroga i file sul posto. Le tue applicazioni e i tuoi utenti continuano a scrivere sul volume tramite NFS o SMB come hanno sempre fatto, e gli analisti eseguono SQL standard su tali dati attraverso il punto di accesso. Poiché un volume FSx for ONTAP è accessibile simultaneamente tramite NFS, SMB e l'API Amazon S3, lo stesso file può essere prodotto da un protocollo e utilizzato da un altro senza una copia.

In questo tutorial, carichi un set di dati di esempio sul tuo volume FSx for ONTAP tramite un punto di accesso Amazon S3, lo registri in e lo interroghi con Amazon AWS Glue Data Catalog Athena.

**Nota**  
Il completamento di questo tutorial richiede circa **20-30 minuti.** Le risorse Servizi AWS utilizzate sono soggette a costi per le risorse create. Se completi tempestivamente tutti i passaggi, inclusa la sezione **Pulizia**, il costo previsto è inferiore a **1 USD** negli Stati Uniti orientali (Virginia settentrionale). Regione AWS Questa stima non include i costi correnti per il volume FSx for ONTAP stesso.

## Prerequisiti
<a name="tutorial-athena-prerequisites"></a>

Prima di iniziare, assicurati di disporre di:
+ Un volume FSx for ONTAP con un access point Amazon S3 collegato. Il punto di accesso deve avere un'origine di **rete Internet**. Per istruzioni sulla creazione di un punto di accesso, vedere[Creazione di un access point](fsxn-creating-access-points.md).
+ Un gruppo di lavoro Athena configurato con una posizione dei risultati delle query. Athena scrive i risultati delle query su un bucket Amazon S3, non sul volume FSx for ONTAP. **Se non disponi di un gruppo di lavoro, puoi utilizzare il `primary` gruppo di lavoro e configurare una posizione dei risultati nella console Athena in Impostazioni.** Per ulteriori informazioni, consulta [Gestire i gruppi di lavoro](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html) nella Guida per l'utente di *Amazon Athena*.
+ Un ruolo IAM AWS Glue con la policy `AWSGlueServiceRole` gestita allegata e una policy in linea che garantisce l'accesso al tuo access point Amazon S3. Se non ne hai uno, segui i passaggi seguenti.

  1. Salva la seguente politica di attendibilità come`glue-trust-policy.json`. Permette AWS Glue di assumere il ruolo.

     ```
     {
         "Version": "2012-10-17", 		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Principal": {"Service": "glue.amazonaws.com"},
                 "Action": "sts:AssumeRole"
             }
         ]
     }
     ```

  1. Salva la seguente politica di autorizzazioni come`glue-s3-policy.json`. Garantisce l'accesso al punto di accesso. Sostituisci `{{region}}` `{{account-id}}` e `{{access-point-name}}` con i tuoi valori.

     ```
     {
         "Version": "2012-10-17", 		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "s3:GetObject",
                     "s3:ListBucket"
                 ],
                 "Resource": [
                     "arn:aws:s3:{{region}}:{{account-id}}:accesspoint/{{access-point-name}}",
                     "arn:aws:s3:{{region}}:{{account-id}}:accesspoint/{{access-point-name}}/object/*"
                 ]
             }
         ]
     }
     ```

  1. Crea il ruolo e allega le politiche.

     ```
     $ aws iam create-role \
         --role-name {{fsxn-tutorial-glue-role}} \
         --assume-role-policy-document file://glue-trust-policy.json
     
     aws iam attach-role-policy \
         --role-name {{fsxn-tutorial-glue-role}} \
         --policy-arn arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
     
     aws iam put-role-policy \
         --role-name {{fsxn-tutorial-glue-role}} \
         --policy-name s3-access-point-policy \
         --policy-document file://glue-s3-policy.json
     ```
+ Autorizzazioni IAM per eseguire query Athena e accedere al AWS Glue Data Catalog.

**Importante**  
Il punto di accesso Amazon S3 deve utilizzare un'origine di rete Internet. Athena accede ad Amazon S3 dall'infrastruttura gestita, non dal tuo VPC. I punti di accesso con un'origine di rete VPC negano le richieste di Athena.

## Fase 1: Caricare dati di esempio sul volume FSx for ONTAP
<a name="tutorial-athena-upload-data"></a>

Questo tutorial utilizza i [Trip Record Data della NYC Taxi and Limousine Commission (TLC), un set di dati sui viaggi in](https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page) taxi a New York disponibile al pubblico. I dati sono in formato Apache Parquet, un formato colonnare su cui Athena può interrogare in modo efficiente.

Scarica i dati di un mese di viaggi in taxi giallo e caricali sul tuo volume FSx for ONTAP tramite il punto di accesso Amazon S3.

```
$ curl -O https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-01.parquet
```

Caricate il file sul volume FSx for ONTAP utilizzando l'alias del punto di accesso. Sostituiscilo `{{my-ap-alias-ext-s3alias}}` con l'alias del punto di accesso.

```
$ aws s3 cp yellow_tripdata_2024-01.parquet \
    s3://{{my-ap-alias-ext-s3alias}}/taxi-data/yellow_tripdata_2024-01.parquet
```

Verifica che il file sia accessibile tramite il punto di accesso.

```
$ aws s3 ls s3://{{my-ap-alias-ext-s3alias}}/taxi-data/
2024-01-23 02:18:13   49961641 yellow_tripdata_2024-01.parquet
```

## Fase 2: Creare un database nel AWS Glue Data Catalog
<a name="tutorial-athena-create-database"></a>

Crea un database nel file AWS Glue Data Catalog per contenere i metadati della tabella. È possibile creare il database utilizzando la AWS Glue console, l'editor di query Athena o il. AWS CLI

**AWS Glue console**

1. Apri la AWS Glue console all'indirizzo [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Nel riquadro di navigazione, in **Data Catalog**, scegli **Database**.

1. Scegli **Aggiungi database**.

1. In **Nome**, inserisci `{{fsxn_taxi_demo}}`.

1. Scegliere **Crea database**.

**Editor di query Athena o AWS CLI**

```
$ aws athena start-query-execution \
    --query-string "CREATE DATABASE IF NOT EXISTS {{fsxn_taxi_demo}}" \
    --work-group {{primary}}
```

## Fase 3: Registrare i dati nel AWS Glue Data Catalog
<a name="tutorial-athena-register-data"></a>

Puoi registrare i tuoi dati utilizzando un AWS Glue crawler (consigliato) o un'`CREATE EXTERNAL TABLE`istruzione manuale in Athena.

### Opzione A: utilizza un AWS Glue crawler (consigliato)
<a name="tutorial-athena-glue-crawler"></a>

Un AWS Glue crawler rileva automaticamente lo schema dei dati e crea una tabella in. AWS Glue Data Catalog Questo è l'approccio consigliato perché il crawler deduce i tipi di colonna corretti dai metadati del file Parquet.

1. Create un crawler che punti all'alias del punto di accesso. `{{my-ap-alias-ext-s3alias}}`Sostituiscilo con l'alias del tuo punto di accesso e `{{my-glue-role-arn}}` con l'ARN del AWS Glue tuo ruolo IAM.

   ```
   $ aws glue create-crawler \
       --name {{fsxn-taxi-crawler}} \
       --role {{my-glue-role-arn}} \
       --database-name {{fsxn_taxi_demo}} \
       --targets '{"S3Targets": [{"Path": "s3://{{my-ap-alias-ext-s3alias}}/taxi-data/"}]}'
   ```

1. Esegui il crawler.

   ```
   $ aws glue start-crawler --name {{fsxn-taxi-crawler}}
   ```

1. Controlla lo stato del crawler. Il crawler si completa in genere in uno o due minuti.

   ```
   $ aws glue get-crawler --name {{fsxn-taxi-crawler}} \
       --query "Crawler.{State:State,Status:LastCrawl.Status}"
   ```

   Al termine del crawler, lo stato è e lo stato è`READY`. `SUCCEEDED` Il crawler crea una tabella denominata `taxi_data` (derivata dal nome della cartella) nel database. `fsxn_taxi_demo`

### Opzione B: crea una tabella manualmente in Athena
<a name="tutorial-athena-manual-ddl"></a>

Se conosci già lo schema dei tuoi dati, puoi creare la tabella direttamente in Athena utilizzando un'`CREATE EXTERNAL TABLE`istruzione. Usa l'alias del punto di accesso nella clausola. `LOCATION`

```
CREATE EXTERNAL TABLE fsxn_taxi_demo.yellow_taxi_trips (
    VendorID bigint,
    tpep_pickup_datetime timestamp,
    tpep_dropoff_datetime timestamp,
    passenger_count bigint,
    trip_distance double,
    RatecodeID bigint,
    store_and_fwd_flag string,
    PULocationID bigint,
    DOLocationID bigint,
    payment_type bigint,
    fare_amount double,
    extra double,
    mta_tax double,
    tip_amount double,
    tolls_amount double,
    improvement_surcharge double,
    total_amount double,
    congestion_surcharge double,
    Airport_fee double
)
STORED AS PARQUET
LOCATION 's3://{{my-ap-alias-ext-s3alias}}/taxi-data/'
```

**Nota**  
I tipi di colonna devono corrispondere ai tipi del file Parquet. Per questo set di dati, i campi come `passenger_count` e `VendorID` sono memorizzati come `bigint` (INT64) nel file Parquet, non. `double` Se i tipi non corrispondono, Athena restituisce un `HIVE_BAD_DATA` errore. L'uso di un AWS Glue crawler (opzione A) evita questo problema perché il crawler deduce automaticamente i tipi corretti.

## Passaggio 4: interroga i dati
<a name="tutorial-athena-query-data"></a>

Apri l'editor di query Athena o utilizzalo AWS CLI per eseguire query SQL sui tuoi dati FSx for ONTAP. Gli esempi seguenti utilizzano la tabella creata dal crawler (). AWS Glue `taxi_data` Se avete creato la tabella manualmente, `taxi_data` sostituitela con. `yellow_taxi_trips`

**Conta i viaggi totali e calcola le medie**

```
SELECT
    COUNT(*) AS total_trips,
    ROUND(AVG(trip_distance), 2) AS avg_distance_miles,
    ROUND(AVG(total_amount), 2) AS avg_total_usd,
    ROUND(AVG(passenger_count), 1) AS avg_passengers
FROM fsxn_taxi_demo.taxi_data
```

Output di esempio:


| viaggi totali | avg\_distance\_miles | avg\_total\_usd | avg\_passeggeri | 
| --- | --- | --- | --- | 
| 2964624 | 3,65 | 26,80 | 1.3 | 

**Trova gli orari di ritiro più trafficati**

```
SELECT
    HOUR(tpep_pickup_datetime) AS pickup_hour,
    COUNT(*) AS trip_count,
    ROUND(AVG(total_amount), 2) AS avg_fare
FROM fsxn_taxi_demo.taxi_data
GROUP BY HOUR(tpep_pickup_datetime)
ORDER BY trip_count DESC
LIMIT 5
```

**Trova i punti di ritiro con il fatturato più elevato**

```
SELECT
    PULocationID AS pickup_location,
    COUNT(*) AS trip_count,
    ROUND(SUM(total_amount), 2) AS total_revenue
FROM fsxn_taxi_demo.taxi_data
GROUP BY PULocationID
ORDER BY total_revenue DESC
LIMIT 10
```

## Considerazioni
<a name="tutorial-athena-considerations"></a>
+ **Read-only accesso.** Athena legge i dati dal volume FSx for ONTAP tramite il punto di accesso. I risultati delle query Athena vengono scritti nel bucket dei risultati di Amazon S3, non nel volume FSx for ONTAP.
+ **È richiesta l'origine Internet.** Athena accede ad Amazon S3 da un'infrastruttura gestita esterna al tuo VPC. I tasti `aws:SourceVpc` and `aws:SourceVpce` condition non sono disponibili per le richieste Athena. È necessario utilizzare un punto di accesso di origine Internet.
+ **Formato del file.** Athena supporta Parquet, ORC, JSON, CSV e altri formati. I formati colonnari come Parquet e ORC offrono le migliori prestazioni di interrogazione perché Athena legge solo le colonne a cui si fa riferimento nella query.
+ **Autorizzazioni utente del file system.** L'utente del file system associato al punto di accesso deve disporre dell'autorizzazione di lettura per i file interrogati.
+ **AWS Glue Data Catalog la tabella è riutilizzabile.** Una volta registrata AWS Glue Data Catalog, una tabella è disponibile per altri servizi di AWS analisi che si integrano con AWS Glue Data Catalog, come Amazon Redshift Spectrum, AWS Glue Amazon EMR ed ETL job.

## Eliminazione
<a name="tutorial-athena-clean-up"></a>

Per evitare addebiti continui, elimina le risorse che hai creato in questo tutorial.

1. Eliminare le tabelle e il database Athena.

   ```
   DROP TABLE IF EXISTS fsxn_taxi_demo.taxi_data;
   DROP TABLE IF EXISTS fsxn_taxi_demo.yellow_taxi_trips;
   DROP DATABASE IF EXISTS fsxn_taxi_demo CASCADE;
   ```

1. Eliminare il AWS Glue crawler.

   ```
   $ aws glue delete-crawler --name {{fsxn-taxi-crawler}}
   ```

1. Eliminare i dati di esempio dal volume FSx for ONTAP.

   ```
   $ aws s3 rm s3://{{my-ap-alias-ext-s3alias}}/taxi-data/yellow_tripdata_2024-01.parquet
   ```