J'ai créé une table dans Amazon Athena avec des partitions définies, mais lorsque je l'interroge, aucun enregistrement n'est renvoyé.

Date de la dernière mise à jour : 07/04/2020

J'ai exécuté une instruction CREATE TABLE dans Amazon Athena, avec les colonnes et types de données correspondants requis. Lorsque j'exécute la requête « SELECT* FROM table-name », le résultat obtenu est « Zero records returned ».

Solution

Voici quelques raisons courantes pour lesquelles la requête peut renvoyer zéro enregistrement.

Fichier sélectionné dans les paramètres de l'analyseur

Si vous utilisez un analyseur, assurez-vous qu'il pointe vers le compartiment Amazon Simple Storage Service (Amazon S3) plutôt que vers un fichier.

Chemin LOCATION incorrect

Vérifiez le chemin LOCATION Amazon S3 applicable aux données d'entrée. Si le chemin LOCATION est incorrect, aucun enregistrement n'est renvoyé par Amazon Athena.

Double barre oblique dans le chemin LOCATION

Amazon Athena ne prend pas en charge les chemins qui incluent une double barre oblique (//). Par exemple, le chemin LOCATION suivant renverra des résultats nuls :

s3://awsexamplebucket/myprefix//input//

Pour résoudre ce problème, copiez les fichiers dans un emplacement dont le chemin ne comporte pas de barres obliques doubles. Voici un exemple de commande dans l'interface en ligne de commande AWS :

aws s3 cp s3://awsexamplebucket/myprefix//input// s3://awsexamplebucket/myprefix/input/ --recursive

Partitions pas encore chargées

Amazon Athena crée des métadonnées uniquement lorsqu'une table est créée. Les données sont analysées uniquement lorsque la requête est exécutée. Si votre table comporte des partitions définies, il est possible que ces dernières ne soient pas encore chargées dans le catalogue de données AWS Glue ou dans le catalogue de données Athena interne. Utilisez la commande MSCK REPAIR TABLE ou ALTER TABLE ADD PARTITION pour charger, dans le catalogue, les informations relatives à la partition.

MSCK REPAIR TABLE

Si les partitions sont stockées dans un format pris en charge par Amazon Athena, exécutez la commande MSCK REPAIR TABLE pour charger, dans le catalogue, les métadonnées d'une partition. Par exemple, si l'une de vos tables est partitionnée en fonction de l'année, les données doivent se trouver dans des emplacements Amazon S3 similaires aux suivants, et pris en charge par Amazon Athena :

  • s3://awsexamplebucket/athena/inputdata/year=2020/data.csv
  • s3://awsexamplebucket/athena/inputdata/year=2019/data.csv
  • s3://awsexamplebucket/athena/inputdata/year=2018/data.csv

Si les données se trouvent dans un emplacement Amazon S3 pris en charge par Amazon Athena, réparez la table en exécutant une commande similaire à la suivante :

CREATE EXTERNAL TABLE Employee (
    Id INT,
    Name STRING,
    Address STRING
) PARTITIONED BY (year INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://awsexamplebucket/athena/inputdata/';

Une fois la table créée, chargez les informations relatives à la partition :

MSCK REPAIR TABLE Employee;

Une fois les données chargées, exécutez à nouveau la requête SELECT* FROM nom-table.

ALTER TABLE ADD PARTITION

Si les partitions ne sont pas stockées dans un format pris en charge par Amazon Athena, ou se trouvent dans des emplacements Amazon S3 différents, exécutez la commande ALTER TABLE ADD PARTITION pour chaque partition. Supposons que vos données se trouvent aux chemins Amazon S3 suivants :

  • s3://awsexamplebucket/athena/inputdata/2020/data.csv
  • s3://awsexamplebucket/athena/inputdata/2019/data.csv
  • s3://awsexamplebucket/athena/inputdata/2018/data.csv

Exécutez alors une commande similaire à celle-ci :

ALTER TABLE Employee ADD
    PARTITION (year=2020) LOCATION 's3://awsexamplebucket/athena/inputdata/2020/'
    PARTITION (year=2019) LOCATION 's3://awsexamplebucket/athena/inputdata/2019/'
    PARTITION (year=2018) LOCATION 's3://awsexamplebucket/athena/inputdata/2018/'

Une fois les données chargées, exécutez à nouveau la requête SELECT* FROM nom-table.


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

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?