문자열에서 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 | +--------------+