J'ai exécuté une instruction CREATE TABLE dans Amazon Athena avec les colonnes attendues et leurs types de données, mais lorsque j'exécute une requête select * from <table-name>, la sortie est Zero records returned (Aucun enregistrement renvoyé). 

Voici quelques motifs courants susceptibles d'expliquer pourquoi la requête peut ne renvoyer aucun enregistrement.

Fichier sélectionné dans les paramètres du robot d'indexation

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

Chemin d'emplacement inexact

Vérifiez le chemin d'accès à l'emplacement Amazon S3 pour les données entrées. Si le chemin d'emplacement en entrée est incorrect, Athena ne renvoie aucun enregistrement.

Les partitions n'ont pas encore été chargées

Si votre table comporte des partitions définies, il est possible qu'elles n'aient pas encore été chargées dans le Catalogue de données AWS Glue ou dans le catalogue de données Athena interne. Dans la mesure où Athena applique les schémas sur lecture, elle crée des métadonnées uniquement lors de la création d'une table. Les tables sont utilisées uniquement lorsque la requête s'exécute. Dans la mesure où il est possible que les données ne se trouvent pas encore à l'emplacement spécifié, Athena ne renvoie aucun enregistrement. Si les partitions sont définies dans l'instruction CREATE TABLE, chargez les informations de partition dans le catalogue à l'aide des commandes MSCK REPAIR TABLE ou ALTER TABLE ADD PARTITION.

MSCK REPAIR TABLE

Si les partitions sont stockées dans un format pris en charge par Athena, exécutez la commande MSCK REPAIR TABLE pour charger les métadonnées d'une partition dans le catalogue. Par exemple, si vous avez une table partitionnée sur Year (Année), Athena s'attend à trouver les données sur les chemins d'accès S3 similaires aux suivants :

  • s3://mybucket/athena/inputdata/year=2016/data.csv
  • s3://mybucket/athena/inputdata/year=2015/data.csv
  • s3://mybucket/athena/inputdata/year=2014/data.csv

Si les données se trouvent bien sur les chemins d'accès S3 attendus par Athena, réparez la table en exécutant une commande similaire à ce qui suit : 

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

Une fois la table créée, chargez les informations de partition à l'aide d'une commande similaire à ce qui suit : 

MSCK REPAIR TABLE Employee;

Une fois les données chargées, la requête select * from <table-name> devrait renvoyer des données.

ALTER TABLE ADD PARTITION

Si les partitions ne sont pas stockées dans un format pris en charge par Athena ou si elles se trouvent sur des chemins d'accès S3 différents, exécutez la commande ALTER TABLE ADD PARTITION pour chaque partition. Par exemple, supposons que vos données se trouvent sur les chemins d'accès S3 suivants :

  • s3://mybucket/athena/inputdata/2016/data.csv
  • s3://mybucket/athena/inputdata/2015/data.csv
  • s3://mybucket/athena/inputdata/2014/data.csv

Étant donné ces chemins d'accès, exécutez une commande similaire à ce qui suit : 

ALTER TABLE Employee ADD
    PARTITION (year=2016) LOCATION 's3://mybucket/athena/inputdata/2016/'
    PARTITION (year=2015) LOCATION 's3://mybucket/athena/inputdata/2015/'
    PARTITION (year=2014) LOCATION 's3://mybucket/athena/inputdata/2014/'

Une fois les données chargées, l'exécution de la requête select * from <table-name> devrait renvoyer des données. 


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support

Date de publication : 15/12/2016

Date de mise à jour : 17/09/2018