Lorsque j'interroge des données CSV dans Athena, je reçois l'erreur « HIVE_BAD_DATA: Error parsing field value for field X: For input string: "" ».

Date de la dernière mise à jour : 30/03/2020

Lorsque j'interroge des données CSV dans Amazon Athena, je reçois une erreur similaire à ce qui suit :

Your query has the following error(s):
HIVE_BAD_DATA: Error parsing field value '' for field 0: For input string: ""
This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: b99xxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Brève description

Il existe plusieurs versions de cette erreur. Si le message d'erreur inclut une chaîne d'entrée avec une valeur (par exemple, « For input string: "12312845691" »), le type de données du fichier ne correspond pas au type de données attendu dans le schéma. Pour plus d'informations, consultez Ma requête Amazon Athena échoue avec l'erreur « HIVE_BAD_DATA: Error parsing field value for field X: For input string: "12312845691" ».

Les erreurs qui spécifient une chaîne d'entrée null ou vide (« For input string: "" ») se produisent lorsque les deux conditions suivantes sont vraies :

  • Vous utilisez Athena avec OpenCSVSerDe, ce qui signifie que vos données sources utilisent des guillemets doubles (") comme guillemets par défaut.
  • Les données source contiennent des valeurs null ("") ou des cellules vides.

Par exemple, les données suivantes renvoient l'erreur « Error parsing field value » :

"1","1","a3","a4"
"","2","a3","def"
"1","3","abc3","ab4"

Solution

Définissez chaque colonne comme STRING. Dans Athena, l'analyseur analyse les valeurs de STRING en types réels en fonction de ce qu'il trouve. Cela empêche Athena de générer une erreur lorsque des valeurs null (chaînes vides avec guillemets doubles et aucun espace) ou des cellules vides (aucune valeur ou guillemets doubles) sont trouvées. Pour plus d'informations sur le traitement des fichiers CSV par Athena, consultez OpenCSVSerDe pour le traitement CSV.

Pour utiliser un type de données spécifique pour une colonne avec une valeur null ou vide, utilisez la commande CAST pour convertir la colonne dans le type souhaité :

1.    Créez la table et définissez chaque colonne comme STRING :

CREATE EXTERNAL TABLE myopencsvtable_example (
   col1 string,
   col2 string,
   col3 string,
   col4 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '"',
   'escapeChar' = '\\'
   )
STORED AS TEXTFILE
LOCATION 's3://awsexamplebucket/';

2.    Interrogez la table :

select * from myopencsvtable_example

Exemple de sortie :

     col1     col2    col3      col4
1    1        1       a3        a4
2             2       a3        def
3    1        3       abc3      ab4

3.    Utilisez la commande CAST « col1 » comme INT et générez la valeur par défaut pour la valeur null ("") :

SELECT COALESCE(TRY(CAST(col1 AS integer)),0) as cast_column,* from myopencsvtable_example

Exemple de sortie :

     cast_column    col1    col2     col3      col4
1    1              1       1        a3        a4
2    0                      2        a3        def
3    1              1       3        abc3      ab4 

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

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


Vous avez besoin d’aide ?