web-dev-qa-db-fra.com

Amazon Athena - La colonne ne peut pas être résolue sur une requête SQL WHERE de base

J'évalue actuellement Amazon Athena et Amazon S3. J'ai créé une base de données (testdb) avec une table (awsevaluationtable). Le tableau comporte deux colonnes, x (bigint) et y (bigint).

Quand je cours:

SELECT * 
FROM testdb."awsevaluationtable"

J'obtiens toutes les données de test: Successful Query

Cependant, lorsque j'essaie une requête WHERE de base:

SELECT * 
FROM testdb."awsevaluationtable" 
WHERE x > 5

Je reçois:

SYNTAX_ERROR: line 3:7: Column 'x' cannot be resolved

J'ai essayé toutes sortes de variantes:

SELECT * FROM testdb.awsevaluationtable WHERE x > 5
SELECT * FROM awsevaluationtable WHERE x > 5
SELECT * FROM testdb."awsevaluationtable" WHERE X > 5
SELECT * FROM testdb."awsevaluationtable" WHERE testdb."awsevaluationtable".x > 5
SELECT * FROM testdb.awsevaluationtable WHERE awsevaluationtable.x > 5

J'ai également confirmé que la colonne x existe avec:

SHOW COLUMNS IN sctawsevaluation

Column query

Cela semble être une requête extrêmement simple mais je ne peux pas comprendre ce qui ne va pas. Je ne vois rien d'évident dans la documentation . Toute suggestion serait appréciée.

8
Joel

J'ai modifié ma réponse à ce problème en fonction de mes résultats actuels et de mes contacts avec les équipes d'assistance AWS Glue et Athena.

Nous avions le même problème - une incapacité à interroger la première colonne de nos fichiers CSV. Le problème se résume à l'encodage du fichier CSV. En bref, AWS Glue et Athena ne prennent actuellement pas en charge les CSV codés en TF-8-BOM . Si vous ouvrez un fichier CSV codé avec une marque d'ordre des octets (BOM) dans Excel ou Notepad ++, il ressemble à n'importe quel fichier texte délimité par des virgules. Cependant, son ouverture dans un éditeur Hex révèle le problème sous-jacent. Il y a un tas de caractères spéciaux au début du fichier: ï "¿ c'est-à-dire la nomenclature.

Lorsqu'un fichier CSV UTF-8-BOM est traité dans AWS Glue, il conserve ces caractères spéciaux et les associe ensuite au nom de la première colonne. Lorsque vous essayez d'interroger la première colonne dans Athena, vous générez une erreur.

Il existe des moyens de contourner cela sur AWS:

  • Dans AWS Glue , modifiez le schéma de table et supprimez la première colonne, puis réinsérez-la avec le nom de colonne approprié, OU

  • Dans AWS Athena , exécutez le SHOW CREATE TABLE DDL pour écrire la table problématique, supprimez le caractère spécial dans le script généré , puis exécutez le script pour créer une nouvelle table sur laquelle vous pouvez interroger.

Pour vous simplifier la vie, assurez-vous simplement que vos CSV sont encodés en UTF-8.

4
owl7

J'ai remarqué que la source csv du tableau d'origine avait des en-têtes de colonne avec des majuscules (X et Y) contrairement aux noms de colonne qui étaient affichés dans Athena. J'ai donc supprimé le tableau, modifié le fichier csv pour que les en-têtes soient en minuscules (x et y), puis recréé le tableau et maintenant ça marche!

0
Joel