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  », j'obtiens des résultats vides.

Voici quelques motifs courants susceptibles d'expliquer pourquoi la requête peut renvoyer des résultats vides.

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. Dans la route de LOCATION d’entrés est incorrecte, Athena va fournir des résultats vides.

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 renvoie un résultat vide. Si les partitions sont définies dans l'instruction CREATE TABLE, chargez les informations de partition dans le catalogue à l'aide de 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 MSCK REPAIR TABLE. MSCK REPAIR TABLE charge les métadonnées d'une partition dans le catalogue. Par exemple, si vous avez une table partitionnée sur l'année (Year), 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 commande « select * from  » devrait renvoyer des données.

ALTERER LA TABLE AJOUTER 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 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 commande « select * from  » 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 : 08/08/2018