JSON_EXTRACT_PATH_TEXT 함수 - Amazon Redshift

JSON_EXTRACT_PATH_TEXT 함수

참고

JSON_PARSE 및 관련 함수는 JSON 값을 SUPER로 구문 분석하는데, Amazon Redshift는 VARCHAR보다 더 효율적으로 구문 분석합니다.

JSON_EXTRACT_PATH_TEXT를 사용하는 대신 JSON_PARSE 함수를 사용해 JSON 문자열을 구문 분석하여 SUPER 값을 얻는 것이 좋습니다. 그런 다음 value.attribute 구문으로 원하는 요소를 쿼리합니다. SUPER 값의 배열 요소를 쿼리하는 방법에 대한 자세한 내용은 비정형 데이터 쿼리 섹션을 참조하세요.

JSON_EXTRACT_PATH_TEXT 함수는 JSON 문자열의 연속된 경로 요소에서 참조하는 키-값 페어 값을 반환합니다. JSON 경로는 최대 5개 레벨까지 중첩될 수 있습니다. 경로 요소는 대/소문자를 구분합니다. JSON 문자열에 경로 요소가 존재하지 않으면 JSON_EXTRACT_PATH_TEXT가 NULL을 반환합니다.

null_if_invalid 인수가 true로 설정되어 있는데 JSON 문자열이 잘못된 경우, 이 함수는 오류 대신 NULL을 반환합니다.

JSON_EXTRACT_PATH_TEXT의 최대 데이터 크기는 64KB입니다. 따라서 JSON 레코드가 64KB보다 큰 경우 JSON_EXTRACT_PATH_TEXT로 처리 시 오류가 발생합니다.

추가 JSON 함수에 대한 자세한 내용은 JSON 함수 섹션을 참조하세요. JSON 작업에 대한 자세한 내용은 JSON 형식의 COPY 지원 섹션을 참조하세요.

구문

JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )

인수

json_string

올바른 형식의 JSON 문자열입니다.

path_elem

JSON 문자열의 경로 요소입니다. 경로 요소 1개는 필수이며, 추가로 5개 레벨까지 경로 요소를 지정할 수 있습니다.

null_if_invalid

(선택) 입력 JSON 문자열이 잘못된 경우 오류 대신 NULL을 반환할지 여부를 지정하는 BOOLEAN 값입니다. JSON이 잘못되었을 때 NULL을 반환하게 하려면 true(t)를 지정합니다. JSON이 잘못되었을 때 오류를 반환하게 하려면 false(f)를 지정합니다. 기본값은 false입니다.

JSON 문자열에서는 Amazon Redshift가 \n을 줄 바꿈 문자로, 그리고 \t를 탭 문자로 인식합니다. 백슬래시를 로드하려면 백슬래시(\\)로 이스케이프하십시오. 자세한 내용은 JSON의 이스케이프 문자 단원을 참조하십시오.

반환 타입

VARCHAR

경로 요소에서 참조한 JSON 값을 나타내는 VARCHAR 문자열입니다.

예시

'f4', 'f6' 경로에 대한 값을 반환하려면 다음 예제를 사용합니다.

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4', 'f6'); +------------------------+ | json_extract_path_text | +------------------------+ | star | +------------------------+

JSON이 유효하지 않아 오류를 반환하려면 다음 예제를 사용합니다.

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6'); ERROR: invalid json object {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}

이 문이 오류를 반환하는 대신 유효하지 않은 JSON에 대해 NULL을 반환하도록 null_if_invalid를 true로 설정하려면 다음 예제를 사용합니다.

SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6',true); +------------------------+ | json_extract_path_text | +------------------------+ | NULL | +------------------------+

검색된 값이 세 번째 수준인 'farm', 'barn', 'color' 경로에 대한 값을 반환하려면 다음 예제를 사용합니다. 이 샘플은 가독성을 높여주는 JSON lint 도구로 형식이 지정되었습니다.

SELECT JSON_EXTRACT_PATH_TEXT('{ "farm": { "barn": { "color": "red", "feed stocked": true } } }', 'farm', 'barn', 'color'); +------------------------+ | json_extract_path_text | +------------------------+ | red | +------------------------+

'color' 요소가 누락되어 NULL을 반환하려면 다음 예제를 사용합니다. 이 샘플은 JSON lint 도구로 형식이 지정되었습니다.

SELECT JSON_EXTRACT_PATH_TEXT('{ "farm": { "barn": {} } }', 'farm', 'barn', 'color'); +------------------------+ | json_extract_path_text | +------------------------+ | NULL | +------------------------+

JSON이 유효한 경우 누락된 요소를 추출하려고 하면 NULL이 반환됩니다.

'house', 'appliances', 'washing machine', 'brand' 경로에 대한 값을 반환하려면 다음 예제를 사용합니다.

SELECT JSON_EXTRACT_PATH_TEXT('{ "house": { "address": { "street": "123 Any St.", "city": "Any Town", "state": "FL", "zip": "32830" }, "bathroom": { "color": "green", "shower": true }, "appliances": { "washing machine": { "brand": "Any Brand", "color": "beige" }, "dryer": { "brand": "Any Brand", "color": "white" } } } }', 'house', 'appliances', 'washing machine', 'brand'); +------------------------+ | json_extract_path_text | +------------------------+ | Any Brand | +------------------------+

다음 예시에서는 샘플 테이블을 만들고 SUPER 값으로 채운 다음, 두 행의 경로 'f2' 값을 반환합니다.

CREATE TABLE json_example(id INT, json_text SUPER); INSERT INTO json_example VALUES (1, JSON_PARSE('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}')), (2, JSON_PARSE('{ "farm": { "barn": { "color": "red", "feed stocked": true } } }')); SELECT * FROM json_example; id | json_text ------------+-------------------------------------------- 1 | {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}} 2 | {"farm":{"barn":{"color":"red","feed stocked":true}}} SELECT id, JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(json_text), 'f2') FROM json_example; id | json_text ------------+-------------------------------------------- 1 | {"f3":1} 2 |