GET

GET

ARRAY 또는 OBJECT(또는 ARRAY나 OBJECT를 포함하는 VARIANT)에서 값을 추출해요. 함수는 두 인자 중 하나라도 NULL이면 NULL을 반환해요. 이 함수는 GET DML 명령과 혼동하면 안 된다는 점에 유의해요.

출처: Snowflake SQL Reference - GET

본문

구문

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을 반환해요.

예시

샘플 데이터가 있는 테이블을 만들어요.

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의 예시 및 사용상 주의사항 섹션을 참고해요.

더 알아보기