Lorsque j'exécute des requêtes Amazon Athena sur des fichiers JSON à impression élégante avec JSON SerDe, mes requêtes échouent et le message d'erreur suivant s'affiche : « HIVE_CURSOR_ERROR : La ligne n'est pas d'objet JSON valide ».
Résolution
Athena JSON SerDe ne prend pas en charge les fichiers JSON à impression élégante comme le fichier suivant :
{
"id": "b179db57-9d5b-40c8-8f07-f75bd1fa1b3c",
"random_number": 19,
"categories": [
"category 1",
"category 2"
],
"dict": {
"name": "category 1",
"comment": "category 2"
}
}
{
"id": "bc4624ce-d752-4e38-8a30-42de158dbc50",
"random_number": 95,
"categories": [
"category 1",
"category 2",
"category 3",
"category 4"
],
"dict": {
"name": "category 2",
"comment": "category 1"
}
}
{
"id": "1d3298e8-e3bb-41c0-950c-6a146555ce3c",
"random_number": 89,
"categories": [
"category 1"
],
"dict": {
"name": "category 5",
"comment": "category 3"
}
}
Amazon Ion étant un super jeu de JSON, utilisez Amazon Ion Hive SerDe pour interroger des jeux de données JSON autres qu'Amazon Ion. Contrairement aux autres bibliothèques JSON SerDe, Amazon Ion SerDe ne s'attend pas à ce que chaque ligne de données se trouve sur une seule ligne. Utilisez cette fonctionnalité pour interroger des jeux de données JSON dans un format à impression élégante ou pour séparer les champs dans une ligne à l'aide de caractères de saut de ligne.
1. Créez une table similaire à la suivante avec Athena Ion Hive SerDe :
CREATE EXTERNAL TABLE table_name (
id string,
random_number int,
categories array<string>,
dict struct<name:string, comment:string>
)
STORED AS ION
LOCATION 's3://sample-bucket/prefix/'
2. Interroger la table :
SELECT * FROM table_name
Le résultat ressemble à celui qui suit :
# id random_number categories dict
1 b179db57-9d5b-40c8-8f07-f75bd1fa1b3c 19 [category 1, category 2] {name=category 1, comment=category 2}
2 bc4624ce-d752-4e38-8a30-42de158dbc50 95 [category 1, category 2, category 3, category 4] {name=category 2, comment=category 1}
3 1d3298e8-e3bb-41c0-950c-6a146555ce3c 89 [category 1] {name=category 5, comment=category 3}
Informations connexes
Pourquoi est-ce que je reçois des messages d'erreurs lorsque j'essaie de lire des données JSON dans Amazon Athena ?