Je l'objet JSON suivant pour la présence d'une personne à des conférences:Amazon Athena - Questions Nested JSON
{"conferences_attended": [
{"conference_name": "dreamforce",
"date": "2017",
"city": "san francisco",
"state": "ca"},
{"conference_name": "RampUp",
"date": "2016",
"city": "san francisco",
"state": "ca"},
],
"last_name" : "doe"}
J'ai couru le code suivant pour créer la table pointant vers où j'ai les données stockées dans s3
CREATE EXTERNAL TABLE IF NOT EXISTS my_db.attendees (
`last_name` string,
`conferences_attended` array< struct<
conference_name:string,
date:string,
city:string,
state:string,
>>,
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://**'
TBLPROPERTIES ('has_encrypted_data'='false');
maintenant, je compose de 2 parties à ma question.
1) Comment interroger pour accéder aux données contenues dans un objet json imbriqué? Les deux requêtes ci-dessous ne fonctionnent pas et pas beaucoup d'autres similaires.
SELECT conferences_attended
FROM attendees;
SELECT conferences_attended.conference_name
FROM attendees;
2) Comment puis-je demander des résultats qui ne correspondent qu'à une portion spécifique du json imbriqué?
SELECT *
FROM attendees
WHERE conferences_attended.conference_name like '%force%';
Je reçois des erreurs qui me porte à croire que je dois changer les types de données ou non imbriquer les données ou quelque chose similr ... Merci pour l'aide et des liens vers des informations soutenant ces types d'actions. Note, j'ai lu les liens suivants et je les ai trouvés utiles, mais je n'ai toujours pas résolu mes besoins. http://docs.aws.amazon.com/athena/latest/ug/rows-and-structs.html et http://thornydev.blogspot.com/2013/07/querying-json-records-via-hive.html et bien d'autres ...
Enfin, des conseils ou des ressources pour les différences entre « org.apache.hive.hcatalog.data.JsonSerDe » et « org.openx.data.jsonserde.JsonSerDe » sont les bienvenus .