

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Interrogez des fichiers avec SQL à l'aide d'Amazon Athena
<a name="tutorial-query-data-with-athena"></a>

Les systèmes d'entreprise produisent fréquemment des résultats basés sur des fichiers (exportations de journaux, extraits de transactions, instantanés d'inventaire, suppressions de fichiers entre systèmes) qui aboutissent sur un partage de fichiers NFS ou SMB.

Avec un point d'accès Amazon S3 connecté au volume FSx for ONTAP, Amazon Athena interroge les fichiers en place. Vos applications et vos utilisateurs continuent d'écrire sur le volume via NFS ou SMB comme ils l'ont toujours fait, et les analystes exécutent du SQL standard sur ces données via le point d'accès. Comme un volume FSx for ONTAP est accessible simultanément via NFS, SMB et l'API Amazon S3, le même fichier peut être produit par un protocole et consommé par un autre sans copie.

Dans ce didacticiel, vous allez télécharger un exemple de jeu de données sur votre volume FSx for ONTAP via un point d'accès Amazon S3, l'enregistrer dans le et l' AWS Glue Data Catalog interroger auprès d'Amazon Athena.

**Note**  
Ce didacticiel prend environ **20 à 30 minutes**. Les ressources que vous Services AWS utilisez sont facturées pour les ressources que vous créez. Si vous effectuez rapidement toutes les étapes, y compris la section **Nettoyage**, le coût prévu est inférieur à **1$** dans l'est des États-Unis (Virginie du Nord) Région AWS. Cette estimation n'inclut pas les frais permanents pour le volume FSx for ONTAP lui-même.

## Conditions préalables
<a name="tutorial-athena-prerequisites"></a>

Avant de commencer, assurez-vous de disposer des éléments suivants :
+ Un volume FSx for ONTAP associé à un point d'accès Amazon S3. Le point d'accès doit avoir une origine de réseau **Internet**. Pour obtenir des instructions sur la création d'un point d'accès, consultez[Création d’un point d’accès](fsxn-creating-access-points.md).
+ Un groupe de travail Athena configuré avec un emplacement des résultats de requête. Athena écrit les résultats des requêtes dans un compartiment Amazon S3, et non dans le volume FSx for ONTAP. **Si vous n'avez pas de groupe de travail, vous pouvez utiliser le `primary` groupe de travail et configurer un emplacement des résultats dans la console Athena sous Paramètres.** Pour plus d'informations, consultez [la section Gestion des groupes de travail](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html) dans le guide de l'*utilisateur d'Amazon Athena*.
+ Un rôle IAM auquel est attachée la politique `AWSGlueServiceRole` gérée et une politique en ligne qui accorde l'accès à votre point d'accès Amazon S3. AWS Glue Si vous n'en avez pas, suivez les étapes ci-dessous.

  1. Enregistrez la politique de confiance suivante sous`glue-trust-policy.json`. Cela permet AWS Glue d'assumer le rôle.

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

  1. Enregistrez la politique d'autorisation suivante sous le nom`glue-s3-policy.json`. Il donne accès au point d'accès. Remplacez `{{region}}``{{account-id}}`, et `{{access-point-name}}` par vos valeurs.

     ```
     {
         "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. Créez le rôle et associez les politiques.

     ```
     $ 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
     ```
+ Autorisations IAM pour exécuter des requêtes Athena et accéder au catalogue AWS Glue de données.

**Important**  
Le point d'accès Amazon S3 doit utiliser une origine de réseau Internet. Athena accède à Amazon S3 depuis une infrastructure gérée, et non depuis votre VPC. Les points d'accès issus d'un réseau VPC refusent les demandes d'Athena.

## Étape 1 : télécharger des exemples de données sur votre volume FSx for ONTAP
<a name="tutorial-athena-upload-data"></a>

Ce didacticiel utilise les données d'[enregistrement des trajets de la NYC Taxi and Limousine Commission (TLC), un ensemble de données](https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page) accessible au public sur les trajets en taxi à New York. Les données sont au format Apache Parquet, un format en colonnes qu'Athena peut interroger efficacement.

Téléchargez un mois de données de trajets en taxi jaunes et chargez-les sur votre volume FSx for ONTAP via le point d'accès Amazon S3.

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

Téléchargez le fichier sur votre volume FSx for ONTAP à l'aide de l'alias du point d'accès. `{{my-ap-alias-ext-s3alias}}`Remplacez-le par l'alias de votre point d'accès.

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

Vérifiez que le fichier est accessible via le point d'accès.

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

## Étape 2 : créer une base de données dans AWS Glue Data Catalog
<a name="tutorial-athena-create-database"></a>

Créez une base de données dans le AWS Glue Data Catalog pour contenir les métadonnées de la table. Vous pouvez créer la base de données à l'aide de la AWS Glue console, de l'éditeur de requêtes Athena ou du. AWS CLI

**AWS Glue console**

1. Ouvrez la AWS Glue console à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Dans le volet de navigation, sous **Catalogue de données**, sélectionnez **Databases**.

1. Choisissez **Ajouter une base de données**.

1. Pour **Nom**, saisissez `{{fsxn_taxi_demo}}`.

1. Choisissez **Créer une base de données**.

**éditeur de requêtes Athena ou AWS CLI**

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

## Étape 3 : Enregistrez les données dans le AWS Glue Data Catalog
<a name="tutorial-athena-register-data"></a>

Vous pouvez enregistrer vos données à l'aide d'un AWS Glue robot d'exploration (recommandé) ou d'une `CREATE EXTERNAL TABLE` instruction manuelle dans Athena.

### Option A : utiliser un AWS Glue robot d'exploration (recommandé)
<a name="tutorial-athena-glue-crawler"></a>

Un AWS Glue robot d'exploration découvre automatiquement le schéma de vos données et crée une table dans le AWS Glue Data Catalog. Il s'agit de l'approche recommandée car le robot d'exploration déduit les types de colonnes corrects à partir des métadonnées du fichier Parquet.

1. Créez un robot qui pointe vers l'alias du point d'accès. `{{my-ap-alias-ext-s3alias}}`Remplacez-le par l'alias de votre point d'accès et `{{my-glue-role-arn}}` par l'ARN de votre rôle AWS Glue 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. Lancez le crawler.

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

1. Vérifiez l'état du crawler. Le crawler s'exécute généralement en une à deux minutes.

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

   Lorsque le robot d'exploration a terminé, l'état est `READY` et le statut est`SUCCEEDED`. Le robot crée une table nommée `taxi_data` (dérivée du nom du dossier) dans la `fsxn_taxi_demo` base de données.

### Option B : créer une table manuellement dans Athena
<a name="tutorial-athena-manual-ddl"></a>

Si vous connaissez déjà le schéma de vos données, vous pouvez créer la table directement dans Athena à l'aide d'une `CREATE EXTERNAL TABLE` instruction. Utilisez l'alias du point d'accès dans la `LOCATION` clause.

```
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/'
```

**Note**  
Les types de colonnes doivent correspondre aux types du fichier Parquet. Pour cet ensemble de données, les champs tels que `passenger_count` et `VendorID` sont stockés sous la forme `bigint` (INT64) dans le fichier Parquet, et non`double`. Si les types ne correspondent pas, Athena renvoie une `HIVE_BAD_DATA` erreur. L'utilisation d'un AWS Glue robot (option A) permet d'éviter ce problème, car le robot d'exploration déduit automatiquement les types corrects.

## Étape 4 : Interrogez vos données
<a name="tutorial-athena-query-data"></a>

Ouvrez l'éditeur de requêtes Athena ou utilisez-le AWS CLI pour exécuter des requêtes SQL sur vos données FSx for ONTAP. Les exemples suivants utilisent la table créée par le AWS Glue robot (`taxi_data`). Si vous avez créé le tableau manuellement, remplacez-le `taxi_data` par`yellow_taxi_trips`.

**Comptez le nombre total de voyages et calculez les moyennes**

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

Exemple de sortie :


| total\_voyages | distance moyenne en miles | avg\_total\_usd | avg\_passengers | 
| --- | --- | --- | --- | 
| 2964624 | 3,65 | 26,80 | 1.3 | 

**Trouvez les heures de ramassage les plus chargées**

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

**Trouvez les points de collecte les plus rentables**

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

## Considérations
<a name="tutorial-athena-considerations"></a>
+ **Read-only accès.** Athena lit les données de votre volume FSx for ONTAP via le point d'accès. Les résultats des requêtes Athena sont écrits dans le compartiment de résultats Amazon S3, et non dans le volume FSx for ONTAP.
+ **Origine Internet requise.** Athena accède à Amazon S3 depuis une infrastructure gérée extérieure à votre VPC. Les clés de `aws:SourceVpce` condition `aws:SourceVpc` et de condition ne sont pas disponibles pour les demandes d'Athena. Vous devez utiliser un point d'accès d'origine Internet.
+ **Format de fichier.** Athena prend en charge les formats Parquet, ORC, JSON, CSV et autres. Les formats de colonnes tels que Parquet et ORC offrent les meilleures performances de requête car Athena ne lit que les colonnes référencées dans votre requête.
+ **Autorisations utilisateur du système de fichiers.** L'utilisateur du système de fichiers associé au point d'accès doit disposer d'une autorisation de lecture sur les fichiers interrogés.
+ **AWS Glue Data Catalog la table est réutilisable.** Une fois que vous avez enregistré une table dans le AWS Glue Data Catalog, elle est disponible pour d'autres services d' AWS analyse intégrés AWS Glue Data Catalog, tels qu'Amazon Redshift Spectrum, AWS Glue Amazon EMR et ETL jobs.

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

Pour éviter des frais récurrents, supprimez les ressources que vous avez créées dans ce didacticiel.

1. Supprimez les tables et la base de données 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. Supprimez le AWS Glue crawler.

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

1. Supprimez les exemples de données de votre volume FSx for ONTAP.

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