- 카테고리:
반정형 및 정형 데이터 함수 (추출)
GET_PATH , :
¶
경로 이름을 사용하여 반정형 데이터에서 값을 추출합니다.
GET_PATH는 GET 의 변형입니다. 첫 번째 인자로서 VARIANT, OBJECT 또는 ARRAY 열 이름을 사용하고, 두 번째 인자로서 제공된 경로 이름에 따라 필드 또는 요소의 값을 추출합니다.
구문¶
GET_PATH( <column_identifier> , '<path_name>' )
<column_identifier>:<path_name>
:( <column_identifier> , '<path_name>' )
인자¶
column_identifier
VARIANT, OBJECT 또는 ARRAY 열로 평가되는 식입니다.
path_name
VARCHAR 값으로 평가되는 식입니다. 이 값은 추출하려는 필드 또는 요소의 경로를 지정합니다.
정형 유형 의 경우 문자열 상수를 지정해야 합니다.
반환¶
반환된 값은 ARRAY의 지정된 요소 또는 OBJECT의 키-값 페어에 지정된 키에 해당하는 값입니다.
입력 오브젝트가 반정형 OBJECT, ARRAY 또는 VARIANT 값인 경우 함수는 VARIANT 값을 반환합니다. 다음과 같은 이유로 값의 데이터 타입은 VARIANT 입니다.
ARRAY 값에서 각 요소는 VARIANT 유형입니다.
OBJECT 값에서 각 키-값 페어의 값은 VARIANT 유형입니다.
입력 오브젝트가 정형 OBJECT, 정형 ARRAY 또는 MAP 인 경우 함수는 오브젝트에 대해 지정된 유형의 값을 반환합니다.
예를 들어 입력 오브젝트의 유형이 ARRAY(NUMBER)인 경우 함수는 NUMBER 값을 반환합니다.
사용법 노트¶
GET_PATH는 GET 함수 체인과 동등합니다. 경로 이름이 어떤 요소와도 일치하지 않으면 NULL 을 반환합니다.
경로 이름 구문은 표준 JavaScript 표기법으로, 필드 이름(식별자) 앞에 기간(예:
.
)과 인덱스 연산자(예:[<index>]
)를 연결한 것으로 구성됩니다.첫 번째 필드 이름에는 선행 기간을 지정할 필요가 없습니다.
인덱스 연산자의 인덱스 값은 음수가 아닌 10진수(배열의 경우)이거나, 작은따옴표 또는 큰따옴표로 묶인 문자열 리터럴(오브젝트 필드의 경우)일 수 있습니다.
자세한 내용은 반정형 데이터 쿼리하기 섹션을 참조하십시오.
또한, GET_PATH 는 경로 지정자에서 열 이름(마침표를 포함할 수 있음)을 분리하는 추출 연산자로서
:
문자를 사용하는 구문 바로 가기를 지원합니다.구문 일관성을 유지하기 위해 경로 표기법은 SQL 스타일의 큰따옴표로 묶인 식별자도 지원하며 경로 구분자로서의
:
사용도 지원합니다.:
연산자를 사용하는 경우, 모든 정수 또는 문자열 하위 식을[]
내에 포함할 수 있습니다.
예¶
VARIANT 열이 있는 테이블을 만들고 데이터를 삽입합니다. PARSE_JSON 함수를 사용하여 VARIANT 데이터를 삽입합니다. VARIANT 값은 중첩된 ARRAY 값과 OBJECT 값을 포함합니다.
CREATE OR REPLACE TABLE get_path_demo(
id INTEGER,
v VARIANT);
INSERT INTO get_path_demo (id, v)
SELECT 1,
PARSE_JSON('{
"array1" : [
{"id1": "value_a1", "id2": "value_a2", "id3": "value_a3"}
],
"array2" : [
{"id1": "value_b1", "id2": "value_b2", "id3": "value_b3"}
],
"object_outer_key1" : {
"object_inner_key1a": "object_x1",
"object_inner_key1b": "object_x2"
}
}');
INSERT INTO get_path_demo (id, v)
SELECT 2,
PARSE_JSON('{
"array1" : [
{"id1": "value_c1", "id2": "value_c2", "id3": "value_c3"}
],
"array2" : [
{"id1": "value_d1", "id2": "value_d2", "id3": "value_d3"}
],
"object_outer_key1" : {
"object_inner_key1a": "object_y1",
"object_inner_key1b": "object_y2"
}
}');
SELECT * FROM get_path_demo;
+----+----------------------------------------+
| ID | V |
|----+----------------------------------------|
| 1 | { |
| | "array1": [ |
| | { |
| | "id1": "value_a1", |
| | "id2": "value_a2", |
| | "id3": "value_a3" |
| | } |
| | ], |
| | "array2": [ |
| | { |
| | "id1": "value_b1", |
| | "id2": "value_b2", |
| | "id3": "value_b3" |
| | } |
| | ], |
| | "object_outer_key1": { |
| | "object_inner_key1a": "object_x1", |
| | "object_inner_key1b": "object_x2" |
| | } |
| | } |
| 2 | { |
| | "array1": [ |
| | { |
| | "id1": "value_c1", |
| | "id2": "value_c2", |
| | "id3": "value_c3" |
| | } |
| | ], |
| | "array2": [ |
| | { |
| | "id1": "value_d1", |
| | "id2": "value_d2", |
| | "id3": "value_d3" |
| | } |
| | ], |
| | "object_outer_key1": { |
| | "object_inner_key1a": "object_y1", |
| | "object_inner_key1b": "object_y2" |
| | } |
| | } |
+----+----------------------------------------+
각 행에서 array2
에서 id3
값을 추출합니다.
SELECT id,
GET_PATH(
v,
'array2[0].id3') AS id3_in_array2
FROM get_path_demo;
+----+---------------+
| ID | ID3_IN_ARRAY2 |
|----+---------------|
| 1 | "value_b3" |
| 2 | "value_d3" |
+----+---------------+
:
연산자를 사용하여 각 행의 array2
에서 동일한 id3
값을 추출합니다.
SELECT id,
v:array2[0].id3 AS id3_in_array2
FROM get_path_demo;
+----+---------------+
| ID | ID3_IN_ARRAY2 |
|----+---------------|
| 1 | "value_b3" |
| 2 | "value_d3" |
+----+---------------+
이 예제는 이전 예제와 동일하지만 SQL 스타일의 큰따옴표 식별자를 사용합니다.
SELECT id,
v:"array2"[0]."id3" AS id3_in_array2
FROM get_path_demo;
+----+---------------+
| ID | ID3_IN_ARRAY2 |
|----+---------------|
| 1 | "value_b3" |
| 2 | "value_d3" |
+----+---------------+
각 행의 중첩된 OBJECT 값에서 object_inner_key1a
값을 추출합니다.
SELECT id,
GET_PATH(
v,
'object_outer_key1:object_inner_key1a') AS object_inner_key1A_values
FROM get_path_demo;
+----+---------------------------+
| ID | OBJECT_INNER_KEY1A_VALUES |
|----+---------------------------|
| 1 | "object_x1" |
| 2 | "object_y1" |
+----+---------------------------+
:
연산자를 사용하여 동일한 object_inner_key1a
값을 추출합니다.
SELECT id,
v:object_outer_key1.object_inner_key1a AS object_inner_key1a_values
FROM get_path_demo;
+----+---------------------------+
| ID | OBJECT_INNER_KEY1A_VALUES |
|----+---------------------------|
| 1 | "object_x1" |
| 2 | "object_y1" |
+----+---------------------------+
이 예제는 이전 예제와 동일하지만 SQL 스타일의 큰따옴표 식별자를 사용합니다.
SELECT id,
v:"object_outer_key1":"object_inner_key1a" AS object_inner_key1a_values
FROM get_path_demo;
+----+---------------------------+
| ID | OBJECT_INNER_KEY1A_VALUES |
|----+---------------------------|
| 1 | "object_x1" |
| 2 | "object_y1" |
+----+---------------------------+