GET
GET
ARRAY 또는 OBJECT(또는 ARRAY나 OBJECT를 포함하는 VARIANT)에서 값을 추출해요. 함수는 두 인자 중 하나라도 NULL이면 NULL을 반환해요. 이 함수는 GET DML 명령과 혼동하면 안 된다는 점에 유의해요.
본문
구문
ARRAY(또는 ARRAY를 포함하는 VARIANT):
GET( <array> , <index> )
GET( <variant> , <index> )
OBJECT(또는 OBJECT를 포함하는 VARIANT):
GET( <object> , <field_name> )
GET( <variant> , <field_name> )
MAP:
GET( <map> , <key> )
인자
- ARRAY로 평가되는 표현식이에요.
- INTEGER로 평가되는 표현식이에요. ARRAY에서 가져올 요소의 위치를 지정해요. 위치는 1이 아닌 0부터 시작해요. 인덱스가 배열 경계 밖을 가리키거나, 인덱스된 요소가 존재하지 않으면(희소 배열에서):
- 배열이 반정형 ARRAY면 이 함수는 NULL을 반환해요.
- 배열이 구조화 ARRAY면 오류가 발생해요.
- ARRAY 또는 OBJECT 중 하나를 포함하는 VARIANT로 평가되는 표현식이에요.
- 키-값 쌍을 포함하는 OBJECT로 평가되는 표현식이에요.
- 값에 대해 검색하려는 키-값 쌍의 키를 지정하는 VARCHAR로 평가되는 표현식이에요.
field_name은 빈 문자열이면 안 돼요. object가 구조화 OBJECT면field_name에 상수를 지정해야 해요. object가 지정한 키를 포함하지 않으면:- object가 반정형 OBJECT면 함수는 NULL을 반환해요.
- object가 구조화 OBJECT면 오류가 발생해요.
- MAP으로 평가되는 표현식이에요.
- 값에 대해 검색하려는 키-값 쌍의 키예요. map이 지정한 키를 포함하지 않으면 함수는 NULL을 반환해요.
반환 값
- 반환 값은 ARRAY의 지정된 요소이거나, OBJECT의 키-값 쌍에서 지정한 키에 해당하는 값이에요.
- 입력 object가 반정형 OBJECT, ARRAY 또는 VARIANT 값이면 함수는 VARIANT 값을 반환해요. 값의 데이터 타입이 VARIANT인 이유는:
- ARRAY 값에서 각 요소는 VARIANT 타입이에요.
- OBJECT 값에서 각 키-값 쌍의 값은 VARIANT 타입이에요.
- 입력 object가 구조화 OBJECT, 구조화 ARRAY 또는 MAP이면 함수는 object에 지정된 타입의 값을 반환해요. 예를 들어 입력 object의 타입이
ARRAY(NUMBER)면 함수는 NUMBER 값을 반환해요.
사용상 주의사항
- GET은
field_name에 대소문자 구분 일치를 적용해요. 대소문자 구분 없는 일치에는GET_IGNORE_CASE를 사용해요. - 첫 번째 파라미터가 VARIANT 타입인 경우:
- 두 번째 파라미터가 VARCHAR 타입이면(예:
field_name), variant가 OBJECT를 포함하지 않으면 함수는 NULL을 반환해요. - 두 번째 파라미터가 INTEGER 타입이면(예:
index), variant가 ARRAY를 포함하지 않으면 함수는 NULL을 반환해요.
- 두 번째 파라미터가 VARCHAR 타입이면(예:
예시
샘플 데이터가 있는 테이블을 만들어요.
CREATE TABLE vartab (a ARRAY, o OBJECT, v VARIANT);
INSERT INTO vartab (a, o, v)
SELECT
ARRAY_CONSTRUCT(2.71, 3.14),
OBJECT_CONSTRUCT('Ukraine', 'Kyiv'::VARIANT,
'France', 'Paris'::VARIANT),
TO_VARIANT(OBJECT_CONSTRUCT('weatherStationID', 42::VARIANT,
'timestamp', '2022-03-07 14:00'::TIMESTAMP_LTZ::VARIANT,
'temperature', 31.5::VARIANT,
'sensorType', 'indoor'::VARIANT))
;
SELECT a, o, v FROM vartab;
+---------+----------------------+-------------------------------------------------+
| A | O | V |
|---------+----------------------+-------------------------------------------------|
| [ | { | { |
| 2.71, | "France": "Paris", | "sensorType": "indoor", |
| 3.14 | "Ukraine": "Kyiv" | "temperature": 31.5, |
| ] | } | "timestamp": "2022-03-07 14:00:00.000 -0800", |
| | | "weatherStationID": 42 |
| | | } |
+---------+----------------------+-------------------------------------------------+
ARRAY의 첫 번째 요소를 추출해요.
SELECT GET(a, 0) FROM vartab;
+-----------+
| GET(A, 0) |
|-----------|
| 2.71 |
+-----------+
국가 이름과 수도가 있는 OBJECT에서, 국가 이름이 주어졌을 때 그 국가의 수도를 추출해요.
SELECT GET(o, 'Ukraine') FROM vartab;
+-------------------+
| GET(O, 'UKRAINE') |
|-------------------|
| "Kyiv" |
+-------------------+
OBJECT를 포함하는 VARIANT에서 온도를 추출해요.
SELECT GET(v, 'temperature') FROM vartab;
+-----------------------+
| GET(V, 'TEMPERATURE') |
|-----------------------|
| 31.5 |
+-----------------------+
더 자세한 예시는 Querying Semi-structured Data를 참고해요. GET을 XMLGET과 함께 사용하는 예시는 XMLGET의 예시 및 사용상 주의사항 섹션을 참고해요.