Passer au contenu

Comment puis-je voir le fichier source Amazon S3 correspondant à une ligne d'une table Athena ?

Lecture de 3 minute(s)
0

Je souhaite que les résultats de ma requête Amazon Athena renvoient les emplacements de fichiers source Amazon Simple Storage Service (Amazon S3) pour chaque ligne des résultats.

Brève description

Vous pouvez écrire des requêtes Athena qui renvoient les chemins des fichiers source pour les données renvoyées par votre requête.

  • Pour rechercher le fichier Amazon S3 contenant les données renvoyées par une ligne spécifique dans une table Athena, exécutez une requête SELECT $path.
  • Pour rechercher les lignes de la table Athena associées à un fichier Amazon S3 spécifique, exécutez une requête SELECT avec la condition WHERE $path.

Résolution

Prérequis : Avant d'exécuter les requêtes de cet article, vous devez disposer des éléments suivants :

  • Une table Athéna. Si vous n'avez pas de table, exécutez une instruction CREATE TABLE.
  • Vous disposez d’un utilisateur ou d’un rôle Gestion des identités et des accès AWS (AWS IAM) autorisé à exécuter des requêtes Athena.

Rechercher le fichier S3 associé à une ligne de votre table Athena

Pour trouver le chemin du fichier source S3 pour une ligne de votre table Athena, exécutez des requêtes similaires aux exemples suivants :

  1. Pour renvoyer les données souhaitées, exécutez une requête SELECT sur votre table :

    SELECT * FROM "my_database"."my_table" WHERE year=2019;
  2. Pour trouver le fichier source Amazon S3 contenant les données, exécutez une requête similaire à la suivante :

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

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

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

Trouver les lignes de la table Athena qui proviennent d'un fichier S3 spécifique

Pour rechercher toutes les lignes de votre table Athena qui contiennent un fichier source S3 spécifique, procédez comme suit :

  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 ou un préfixe S3 spécifique. Dans l'exemple suivant, remplacez s3://awsexamplebucket/my_table/my_partition/ par le chemin de votre partition.

    aws s3 ls s3://awsexamplebucket/my_table/my_partition/
  2. Pour renvoyer les données associées au fichier Amazon S3, dans Athena, exécutez une requête SELECT sur votre table :

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

La requête précédente renvoie des données provenant du chemin Amazon S3 que vous avez spécifié :

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'

Les requêtes Athena prennent en charge la fonctionnalité de caractère générique avec la fonction regexp_like. Par exemple, pour renvoyer des données provenant de tous les fichiers source dont le chemin comporte une chaîne de caractères, exécutez une requête comme celle-ci :

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

Cette requête renvoie toutes les lignes dont les noms de chemins de fichier contiennent file-1 :

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

Informations connexes

Parquet SerDe

Connexion à des sources de données

Obtenir les emplacements de fichiers pour les données source dans Amazon S3

AWS OFFICIELA mis à jour il y a un an