Pourquoi est-ce que je n'obtiens aucun enregistrement lorsque j'interroge ma table Amazon Athena ?

Date de la dernière mise à jour : 15/04/2021

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

Résolution

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 LOCATION incorrect

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

Double barre oblique dans le chemin LOCATION

Athena ne prend pas en charge les chemins d’emplacement de table qui incluent une double barre oblique (//). Par exemple, le chemin LOCATION suivant renverra des résultats vides :

s3 : //doc-example-bucket/myprefix//input//

Pour résoudre ce problème, copiez les fichiers dans un emplacement dont le chemin ne comporte pas de barres obliques doubles. Pour ce faire, voici un exemple de commande AWS CLI (AWS Command Line Interface) :

aws s3 cp s3://doc-example-bucket/myprefix//input// s3://doc-example-bucket/myprefix/input/ --recursive

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Données pour plusieurs tables stockées dans le même préfixe S3

Les analyseurs AWS Glue créent des tables distinctes pour les données stockées dans le même préfixe S3. Cependant, lorsque vous interrogez ces tables dans Athena, vous n'obtenez aucun enregistrement.

Par exemple, votre requête Athena ne renvoie aucun enregistrement si l'emplacement de votre table est semblable à ce qui suit :

  • s3://doc-example-bucket/table1.csv
  • s3://doc-example-bucket/table2.csv

Afin de résoudre ce problème, créez des préfixes S3 individuels pour chaque table, comme suit :

  • s3://doc-example-bucket/table1/table1.csv
  • s3://doc-example-bucket/table2/table2.csv

Ensuite, exécutez une requête semblable à la suivante pour mettre à jour l'emplacement de votre table table1 :

ALTER TABLE table1 SET LOCATION 's3://doc-example-bucket/table1';

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

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 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. Utilisez la commande MSCK REPAIR TABLE ou ALTER TABLE ADD PARTITION pour charger les informations relatives à la partition dans le catalogue.

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 Année, Athena s'attend à trouver les données sur les chemins d'accès Amazon S3 similaires aux suivants :

  • s3://doc-example-bucket/athena/inputdata/year=2020/data.csv
  • s3 : //doc-example-bucket/athena/inputdata/year=2019/data.csv
  • s3://doc-example-bucket/athena/inputdata/year=2018/data.csv

Si les données se trouvent bien sur les chemins d'accès Amazon 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://doc-example-bucket/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 suivante :

SELECT * FROM Employee;

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 : //doc-example-bucket/athena/inputdata/2020/data.csv
  • s3 : //doc-example-bucket/athena/inputdata/2019/data.csv
  • s3://doc-example-bucket/athena/inputdata/2018/data.csv

Au vu de ces chemins, exécutez une commande similaire à ce qui suit :

ALTER TABLE Employee ADD
    PARTITION (year=2020) LOCATION 's3://doc-example-bucket/athena/inputdata/2020/'
    PARTITION (year=2019) LOCATION 's3://doc-example-bucket/athena/inputdata/2019/'
    PARTITION (year=2018) LOCATION 's3://doc-example-bucket/athena/inputdata/2018/'

Une fois les données chargées, exécutez à nouveau la requête suivante :

SELECT * FROM Employee;

Fichiers Hive cachés

Vérifiez que vos noms de fichiers ne commencent pas par un trait de soulignement (_) ou un point (.).

Exemple :

  • s3://doc-example-bucket/athena/inputdata/_file1
  • s3://doc-example-bucket/athena/inputdata/.file2

Si les fichiers de votre chemin S3 ont des noms commençant par un trait de soulignement ou un point, Athena considère ces fichiers comme des espaces réservés. Athena ignore ces fichiers lors du traitement d'une requête. Pour plus d'informations, consultez Athena ne peut pas lire les fichiers cachés. Si tous les fichiers de votre chemin S3 ont des noms qui commencent par un trait de soulignement ou un point, alors vous n’obtiendrez aucun enregistrement.

Remarque : Si votre chemin S3 inclut des espaces réservés ainsi que des fichiers dont les noms commencent par des caractères différents, Athena ignore uniquement les espaces réservés et interroge les autres fichiers. Par conséquent, vous pourriez obtenir un ou plusieurs enregistrements.


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


Besoin d'aide pour une question technique ou de facturation ?