JSON에서 데이터 추출 - Amazon Athena

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

JSON에서 데이터 추출

Athena의 테이블로 역직렬화할 필요가 없는 JSON 인코딩 문자열을 포함하는 원본 데이터가 있을 수 있습니다. 이 경우에도 Presto에 제공된 JSON 함수를 사용하여 이 데이터에 대해 SQL 작업을 실행할 수 있습니다.

이 JSON 문자열을 예제 데이터 세트로 간주합니다.

{"name": "Susan Smith", "org": "engineering", "projects": [ {"name":"project1", "completed":false}, {"name":"project2", "completed":true} ] }

예제: 속성 추출

JSON 문자열에서 nameprojects 속성을 추출하려면 다음 예제에서와 같이 json_extract 함수를 사용합니다. json_extract 함수는 JSON 문자열을 포함하는 열을 가져오고 JSONPath처럼 점 . 표기법으로 이루어진 식을 검색합니다.

참고

JSONPath가 단순한 트리 순회를 수행합니다. 그리고 $ 기호를 사용해 JSON 문서의 루트를 나타내고, 그 뒤에는 마침표와 루트 바로 아래에 중첩되는 요소가 이어집니다(예: $.name).

WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false}, {"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract(myblob, '$.name') AS name, json_extract(myblob, '$.projects') AS projects FROM dataset

반환되는 값은 기본 Athena 데이터 유형이 아닌 JSON 인코딩 문자열입니다.

+-----------------------------------------------------------------------------------------------+ | name | projects | +-----------------------------------------------------------------------------------------------+ | "Susan Smith" | [{"name":"project1","completed":false},{"name":"project2","completed":true}] | +-----------------------------------------------------------------------------------------------+

JSON 문자열에서 스칼라 값을 추출하려면 json_extract_scalar 함수를 사용합니다. json_extract와 비슷하지만 스칼라 값(부울, 숫자 또는 문자열)만 반환합니다.

참고

어레이, 맵 또는 구조체에 json_extract_scalar 함수를 사용하지 마세요.

WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.name') AS name, json_extract_scalar(myblob, '$.projects') AS projects FROM dataset

이 쿼리가 반환하는 값:

+---------------------------+ | name | projects | +---------------------------+ | Susan Smith | | +---------------------------+

예제 어레이에서 projects 속성의 첫 번째 요소를 얻으려면 json_array_get 함수를 사용하고 인덱스 위치를 지정합니다.

WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_array_get(json_extract(myblob, '$.projects'), 0) AS item FROM dataset

JSON 인코딩 어레이에서 지정된 인덱스 위치에 있는 값을 반환합니다.

+---------------------------------------+ | item | +---------------------------------------+ | {"name":"project1","completed":false} | +---------------------------------------+

Athena 문자열 유형이 반환되게 하려면 JSONPath 식 내에 [] 연산자를 사용한 다음 json_extract_scalar 함수를 사용합니다. []에 대한 자세한 정보는 배열 요소에 액세스 섹션을 참조하세요.

WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.projects[0].name') AS project_name FROM dataset

다음 결과를 반환합니다.

+--------------+ | project_name | +--------------+ | project1 | +--------------+