나는 회의에 사람의 출석에 대한 다음 JSON 개체가 : 내가 S3아마존 아테나 - 중첩 된 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"}
을
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');
이제 제 질문에 2 부분이 있습니다.
1) 중첩 된 json 개체에있는 데이터에 액세스하려면 어떻게 쿼리합니까? 아래의 두 쿼리는 작동하지 않으며 비슷한 쿼리도 없습니다.
SELECT conferences_attended
FROM attendees;
SELECT conferences_attended.conference_name
FROM attendees;
2) 중첩 된 json의 특정 부분에만 일치하는 결과를 얻으려면 어떻게 쿼리합니까?
SELECT *
FROM attendees
WHERE conferences_attended.conference_name like '%force%';
나는 데이터 유형 또는 취소 둥지를 변경하려면 데이터 또는 뭔가 similr ... 도움을 주셔서 감사합니다 그리고 이러한 유형의 작업을 지원하는 정보에 대한 링크를 필요로 믿고 날 리드 그 오류를 얻고있다. 다음 링크를 읽고 도움이되었지만 여전히 나의 필요를 해결하지 못함을 유의하십시오. http://docs.aws.amazon.com/athena/latest/ug/rows-and-structs.html 및 http://thornydev.blogspot.com/2013/07/querying-json-records-via-hive.html 및 많은 다른 사람 ...
이마지막으로, 'org.apache.hive.hcatalog.data.JsonSerDe'와 'org.openx.data.jsonserde.JsonSerDe'의 차이점에 대한 조언이나 리소스를 환영합니다 .