Comment résoudre l’exception « HIVE_CURSOR_ERROR » lorsque j’interroge une table dans Amazon Athena ?
Lorsque j’exécute des requêtes sur ma table Amazon Athena, j’obtiens une exception « HIVE_CURSOR_ERROR ».
Solution
Voici certaines situations qui peuvent entraîner cette exception :
- Les objets de données à l’emplacement de votre table sont endommagés, ne sont pas valides ou ne sont pas correctement compressés.
- Les enregistrements contenus dans les données de la table ne sont pas valides (par exemple : un enregistrement JSON est incorrect).
Exceptions HIVE_CURSOR_ERROR fréquentes
S’il y a des problèmes avec les objets à l’emplacement de votre table Amazon Simple Storage Service (Amazon S3), l’une des exceptions suivantes peut survenir :
- HIVE_CURSOR_ERROR : incorrect header check
- HIVE_CURSOR_ERROR : invalid block type
- HIVE_CURSOR_ERROR : incorrect data check
- HIVE_CURSOR_ERROR : Unexpected end of input stream
- HIVE_CURSOR_ERROR : invalid stored block lengths
- HIVE_CURSOR_ERROR : invalid distance code
Si vous avez récemment ajouté de nouveaux objets à l’emplacement de votre table Amazon S3, vérifiez que ces objets sont valides et qu’ils ne sont pas endommagés. Téléchargez les objets, puis inspectez-les à l’aide de l’outil de votre choix. Par exemple, décompressez les objets compressés au format GZIP pour vérifier si la compression est valide.
Si votre table est partitionnée, vérifiez si vous pouvez interroger des partitions individuelles. Si la table comporte de nouvelles partitions, elles peuvent contenir des objets qui ne sont pas valides.
Exceptions HIVE_CURSOR_ERROR spécifiques
HIVE_CURSOR_ERROR : la ligne n’est pas un objet JSON valide
Cette erreur s’affiche lorsqu’une ligne du tableau ne constitue pas un enregistrement JSON valide.
Pour résoudre ce problème, effectuez les opérations suivantes :
- Ajoutez la propriété 'ignore.malformed.json' = 'true' pour recréer la table.
- Exécutez une commande qui interroge la nouvelle table afin d’identifier les fichiers contenant des enregistrements incorrects, comme ceci :
SELECT "$path" FROM example_table WHERE example_column = NULL
Pour en savoir plus, consultez Pourquoi est-ce que je reçois des messages d’erreurs lorsque j’essaie de lire des données JSON dans Amazon Athena ? et OpenX JSON SerDe.
HIVE_CURSOR_ERROR : Corrupted uncompressed block
Cette erreur s’affiche lorsque vous utilisez le format LZO pour compresser des objets à l’emplacement de votre table.
Pour résoudre cette erreur concernant les données compressées LZO, recréez la table à l’aide de INPUTFORMAT « com.hadoop.mapred.DeprecatedLzoTextInputFormat ». Par exemple :
CREATE EXTERNAL TABLE example_table ( example_column_1 STRING, example_column_2 STRING ) STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://example_bucket/example_prefix/'
Vous pouvez également utiliser un autre format de compression pour résoudre cette erreur.
HIVE_CURSOR_ERROR : Can not read value at 0 in block 0 in file
Cette erreur s’affiche lorsque des objets Parquet dans le chemin S3 ne sont pas valides. Vérifiez si vos objets Parquet contiennent des données de types DECIMAL. Si les objets Parquet contenant des types de données DECIMAL ont été créés à l’aide de Spark, ils sont peut-être incompatibles avec Hive. Pour vérifier ceci, utilisez une tâche Spark pour lire ces objets Parquet.
Si la lecture de ces objets fonctionne avec une tâche Spark, réécrivez les objets en mode hérité dans Spark avec la configuration suivante :
spark.sql.parquet.writeLegacyFormat = true
Pour vous renseigner sur les options de configuration de Spark pour Parquet, consultez la section Configuration du site Web de Spark SQL.
HIVE_CURSOR_ERROR : org.apache.hadoop.io.ArrayWritable cannot be cast to org.apache.hadoop.io.Text
Cette erreur s’affiche si vous avez utilisé un SerDe incorrect pour la définition de la table. Par exemple, il se peut que la table peut utilise un SerDe JSON et que les données sources incluent des objets Parquet.
Pour résoudre cette erreur, examinez les données sources et vérifiez que le bon SerDe est utilisé. Pour en savoir plus, consultez la section SerDes et formats de données pris en charge.
Erreurs HIVE_CURSOR_ERROR associées à des fichiers lus depuis AWS Config
HIVE_CURSOR_ERROR : java.io.IOException: Start of Object expected
Cette erreur survient lorsque les données JSONSerde ne parviennent pas à obtenir l’objet de départ de l’enregistrement JSON. Soit les données ne correspondent pas au schéma, soit les fichiers sont endommagés lorsque vous exécutez une requête.
Pour résoudre cette erreur, utilisez un autre SerDE à la place du SerDe par défaut org.apache.hive.hcatalog.data.JsonSerDe, par exemple org.openx.data.jsonserde.JsonSerDe. Ensuite, définissez la propriété de la table sur 'ignore.malformed.json' = 'true'.
Pour en savoir plus, consultez la section Bibliothèques JSON SerDe.
HIVE_CURSOR_ERROR : java.io.IOException: Start token not found where expected.
Cette erreur s’affiche lorsque l’emplacement de la table Athena contient des fichiers autres que ceux fournis par AWS Config. Par exemple, lorsqu’une sortie CSV de requête Athena est définie au même emplacement que les fichiers AWS Config au format JSON.
Pour résoudre cette erreur, déplacez ou supprimez des fichiers qui ne sont pas générés par AWS Config. Pour les résultats des requêtes Athena, les fichiers de sortie sont stockés selon le modèle de chemin suivant :
QueryResultsLocationInS3/[QueryName|Unsaved/yyyy/mm/dd/]
HIVE_CURSOR_ERROR : la ligne n’est pas un objet JSON valide - JSONException : Clé en double
Cette erreur s’affiche lorsque les ressources AWS Config comportent plusieurs balises portant le même nom ou que certaines sont en majuscules et d’autres en minuscules.
Pour résoudre cette erreur, consultez Comment résoudre l’erreur « HIVE_CURSOR_ERROR : la ligne n’est pas un objet JSON valide - JSONException : Clé en double » apparue lors de la lecture de fichiers depuis AWS Config dans Athena ?
Informations complémentaires
Contenus pertinents
- demandé il y a 16 jourslg...
- demandé il y a 2 moislg...
- Réponse acceptéedemandé il y a un moislg...
- demandé il y a 6 moislg...
- demandé il y a un anlg...
- AWS OFFICIELA mis à jour il y a 9 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 9 mois
- AWS OFFICIELA mis à jour il y a 4 ans