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'
Informations connexes
Parquet SerDe
Connexion à des sources de données