Comment voir le fichier source Amazon S3 d'une ligne de table Athena ?

Dernière mise à jour : 10-06-2021

J'interroge une table dans Amazon Athena. Je souhaite savoir quel fichier Amazon Simple Storage Service (Amazon S3) est la source de chaque ligne de la sortie, ou quelles lignes correspondent à un fichier spécifique.

Brève description

  • Exécutez une requête SELECT $path pour savoir quel fichier Amazon S3 contient les données renvoyées par une ligne spécifique d'une table Athena.
  • Pour savoir quelles lignes de table Athena sont associées à un fichier Amazon S3 spécifique, exécutez une requête SELECT avec la condition WHERE $path.

Ces requêtes sont doublement utiles : elles aident à examiner les données inattendues d'une part et, d'autre part, à créer des requêtes qui nécessitent des informations sur les données sources.

Solution

Avant d'exécuter les requêtes suivantes, vérifiez que vous disposez des éléments suivants :

  • Une table Athena. Si vous n'avez pas de table, exécutez une instruction « CREATE TABLE » (CRÉER UNE TABLE).
  • Un utilisateur ou un rôle AWS Identity and Access Management (IAM) qui dispose des autorisations nécessaires pour exécuter des requêtes Athena.

Pour rechercher le fichier S3 associé à une ligne dans une table Athena :

1.    Exécutez une requête « SELECT » (SÉLECTIONNER) sur votre table pour renvoyer les données souhaitées.

SELECT * FROM "my_database"."my_table" WHERE year=2019;

2.    Pour trouver le fichier source Amazon S3 pour les données, exécutez une requête similaire à ce qui suit :

SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;

La requête renvoie le chemin Amazon S3 pour les données :

s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json

Pour renvoyer des lignes de table Athena provenant d'un fichier Amazon S3 spécifique :

1.    Confirmez le nom et l'emplacement de l'objet Amazon S3 pour lequel vous souhaitez récupérer des lignes. Si vous ne connaissez pas le nom et l'emplacement de l'objet, exécutez la commande ls pour répertorier les objets sous un compartiment S3 ou un préfixe spécifique. Dans l'exemple suivant, remplacez s3://awsexamplebucket/my_table/my_partition/ par votre chemin de partition.

aws s3 ls s3://awsexamplebucket/my_table/my_partition/

2.    Dans Athena, exécutez une requête « SELECT » (SÉLECTIONNER) sur votre table pour renvoyer les données associées au fichier Amazon S3 :

SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 's3://awsexamplebucket/my_table/my_partition/file-01.csv')

La requête renvoie les données qui correspondent au chemin d'Amazon S3 :

id    name    year    $path
3     John    1999    's3://awsexamplebucket/my_table/my_partition/file-01.csv'
4     Jane    2000    's3://awsexamplebucket/my_table/my_partition/file-01.csv'

Cette requête prend également en charge certaines fonctionnalités génériques. Par exemple, pour renvoyer toutes les données qui contiennent une partie d'un nom de fichier, exécutez une requête comme celle-ci :

SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", '\-02')

Cette requête renvoie toutes les lignes comportant des noms de fichier avec -02 :

id    name    year    $path
13    Mia     2009    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
14    Mary    2010    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
15    Max     2011    's3://awsexamplebucket/my_table/my_partition/file-02.csv'
16    Merriam 2012    's3://awsexamplebucket/my_table/my_partition/file-02.csv'

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?