SQL JSON 함수
Druid SQL에서 JSON 데이터를 추출·변환·생성할 때 쓰는 JSON 함수들을 소개해요. nested column과 함께 쓰면 JSON 구조를 효율적으로 다룰 수 있어요.
출처: 문서
본문
Druid는 중첩 데이터 구조를 위한 최적화된 저장과 인덱스를 제공하는 nested column을 지원해요. 자세한 내용은 Nested columns 문서를 참고해요.
다음 JSON 함수들을 사용해 COMPLEX<json> 객체를 추출·변환·생성할 수 있어요.
| Function | Notes |
| JSON_KEYS(expr, path) | expr에서 지정된 path 위치의 필드 이름 배열을 반환해요. |
| JSON_MERGE(expr1, expr2[, expr3 ...]) | 두 개 이상의 JSON STRING 또는 COMPLEX 값을 하나로 병합해요. 키가 겹치면 가장 오른쪽 값을 유지해요. 어떤 인자가 NULL이면 NULL을 반환해요. 항상 COMPLEX 객체를 반환해요. |
| JSON_OBJECT(KEY expr1 VALUE expr2[, KEY expr3 VALUE expr4, ...]) | 하나 이상의 표현식으로 새 COMPLEX 객체를 만들어요. KEY 표현식은 string 타입으로 평가돼야 해요. VALUE 표현식은 다른 COMPLEX 객체를 포함한 어떤 입력 타입으로도 구성될 수 있어요. 콜론으로 구분된 키-값 쌍도 받을 수 있어요. 다음 구문도 동일해요: JSON_OBJECT(expr1:expr2[, expr3:expr4, ...]) . |
| JSON_PATHS(expr) | expr에서 기본형(primitive) 값을 가리키는 모든 경로를 JSONPath 형식의 배열로 반환해요. |
| JSON_QUERY(expr, path) | expr에서 지정된 path 위치의 COMPLEX 값을 추출해요. |
| JSON_QUERY_ARRAY(expr, path) | expr에서 지정된 path 위치의 ARRAY<COMPLEX> 값을 추출해요. 값이 ARRAY가 아니면, path의 값을 담은 단일 요소 ARRAY로 변환해요. 주로 다른 array 함수의 입력으로 쓸 객체 배열을 추출할 때 사용해요. |
| JSON_VALUE(expr, path [RETURNING sqlType]) | expr에서 지정된 path 위치의 기본형 값을 추출해요. RETURNING을 포함하고 SQL 타입(예: VARCHAR , BIGINT , DOUBLE )을 지정하면 제안된 타입으로 쿼리를 계획해요. RETURNING을 포함하지 않으면 문맥에 따라 타입을 추론하려고 해요. 타입을 추론할 수 없으면 VARCHAR로 기본 설정돼요. 기본형 배열도 반환할 수 있지만, RETURNING을 ARRAY 타입(예: RETURNING VARCHAR ARRAY )으로 지정한 경우에만 가능해요. |
| PARSE_JSON(expr) | expr을 COMPLEX 객체로 파싱해요. 이 함수는 처리 과정에서 JSON 값을 역직렬화해서 문자열화된 JSON을 중첩 구조로 변환해요. 입력이 유효하지 않은 JSON이거나 VARCHAR가 아니면 오류를 반환해요. |
| TRY_PARSE_JSON(expr) | expr을 COMPLEX 객체로 파싱해요. 이 연산자는 처리 과정에서 JSON 값을 역직렬화해서 문자열화된 JSON을 중첩 구조로 변환해요. 입력이 유효하지 않은 JSON이거나 VARCHAR가 아니면 NULL 값을 반환해요. |
| TO_JSON_STRING(expr) | expr을 JSON 문자열로 직렬화해요. |
JSONPath 문법
Druid는 JSONPath 문법 연산자의 일부만 지원해요. 주로 중첩 데이터 구조에서 개별 값을 추출하는 데 한정돼요.
| Operator | Description |
| $ | 루트 요소예요. 모든 JSONPath 표현식은 이 연산자로 시작해요. |
| . | 점 표기법(dot notation)의 자식 요소예요. |
| [''] | 대괄호 표기법(bracket notation)의 자식 요소예요. |
| [] | 배열 인덱스예요. |
다음과 같은 예시 입력 JSON을 생각해 봐요:
{
"x":1, "y":[1, 2, 3]}
- 전체 JSON 객체를 반환하려면:
$ -> {"x":1, "y":[1, 2, 3]}
- 키 "x"의 값을 반환하려면:
$.x -> 1
- 배열을 담은 키에서 전체 배열을 반환하려면:
$['y'] -> [1, 2, 3]
- 배열을 담은 키에서 배열의 항목을 반환하려면:
$.y[1] -> 2
더 알아보기 (Learn more)