View a markdown version of this page

Interrogez des fichiers avec SQL à l'aide d'Amazon Athena - FSx pour ONTAP

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

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

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, consultezCréation d’un point d’accès.

  • 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 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 sousglue-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" } ] }
    2. Enregistrez la politique d'autorisation suivante sous le nomglue-s3-policy.json. Il donne accès au point d'accès. Remplacez regionaccount-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/*" ] } ] }
    3. 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

Ce didacticiel utilise les données d'enregistrement des trajets de la NYC Taxi and Limousine Commission (TLC), un ensemble de données 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-s3aliasRemplacez-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

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

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

  3. Choisissez Ajouter une base de données.

  4. Pour Nom, saisissez fsxn_taxi_demo.

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

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é)

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-s3aliasRemplacez-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/"}]}'
  2. Lancez le crawler.

    $ aws glue start-crawler --name fsxn-taxi-crawler
  3. 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 estSUCCEEDED. 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

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

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

  • 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

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;
  2. Supprimez le AWS Glue crawler.

    $ aws glue delete-crawler --name fsxn-taxi-crawler
  3. 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