본문으로 건너뛰기
최종 수정: 에

ELEMENT_AT

기능​

ELEMENT_AT 함수는 지정한 인덱스나 키에 해당하는 요소 값을 배열, 맵, struct 또는 variant에서 추출하는 데 사용됩니다.

  • ARRAY에 적용하면 지정한 위치의 요소를 반환합니다.
  • MAP에 적용하면 지정한 키에 해당하는 값을 반환합니다.
  • STRUCT에 적용하면 지정한 위치(1부터 시작) 또는 필드 이름에 해당하는 하위 필드를 반환하며, STRUCT_ELEMENT와 동일하게 동작합니다.
  • VARIANT에 적용하면 지정한 하위 필드의 값을 반환합니다.

구문​

ELEMENT_AT(container, key_or_index)

매개변수​

  • container: ARRAY, MAP, STRUCT 또는 VARIANT일 수 있습니다.
  • key_or_index:
    • ARRAY의 경우: 정수이며, 인덱스는 1부터 시작합니다.
    • MAP의 경우: 키 타입(K)으로, 해당 MAP에서 지원하는 모든 기본 타입을 사용할 수 있습니다.
    • STRUCT의 경우: 필드 위치를 나타내는 정수 상수(1부터 시작) 또는 필드 이름을 나타내는 문자열 상수(대소문자를 구분하지 않고 일치 여부를 확인)입니다.
    • VARIANT의 경우: 문자열 타입입니다.

반환 값​

  • ARRAY의 경우: 지정한 인덱스의 요소를 반환합니다(T 타입).
  • MAP의 경우: 지정한 키에 해당하는 값을 반환합니다(V 타입).
  • STRUCT의 경우: 지정한 하위 필드의 값을 반환합니다.
  • VARIANT의 경우: VARIANT 타입의 값을 반환합니다.
  • 인덱스나 키가 존재하지 않으면 NULL을 반환합니다(STRUCT의 경우 범위를 벗어난 위치나 존재하지 않는 필드 이름을 지정하면 오류가 발생합니다).
  • 매개변수가 NULL이면 NULL을 반환합니다.

참고 사항​

  1. 배열 인덱스는 1부터 시작하며, 0부터 시작하지 않습니다.
  2. 음수 인덱스를 지원합니다. -1은 마지막 요소를, -2는 끝에서 두 번째 요소를 나타내며, 이후에도 같은 방식으로 적용됩니다.
  3. ELEMENT_AT(container, key_or_index) 함수는 container[key_or_index]와 동일하게 동작합니다(자세한 내용은 예제 참조).

예제​

  1. ELEMENT_AT 함수는 []와 동일하게 동작합니다.

    SELECT ELEMENT_AT([1, 2, 3], 2);
    +--------------------------+
    | ELEMENT_AT([1, 2, 3], 2) |
    +--------------------------+
    | 2 |
    +--------------------------+

    SELECT [1, 2, 3][2];
    +--------------+
    | [1, 2, 3][2] |
    +--------------+
    | 2 |
    +--------------+
  2. 배열 인덱스는 1부터 시작하며, 범위를 벗어난 위치에 접근하면 NULL을 반환합니다.

    SELECT ELEMENT_AT([1, 2, 3], 0);
    +--------------------------+
    | ELEMENT_AT([1, 2, 3], 0) |
    +--------------------------+
    | NULL |
    +--------------------------+

    SELECT ELEMENT_AT([1, 2, 3], 4);
    +--------------------------+
    | ELEMENT_AT([1, 2, 3], 4) |
    +--------------------------+
    | NULL |
    +--------------------------+
  3. MAP에서 존재하지 않는 KEY에 접근하면 NULL을 반환합니다.

    SELECT ELEMENT_AT({"a": 1, "b": 2}, "c");
    +-----------------------------------+
    | ELEMENT_AT({"a": 1, "b": 2}, "c") |
    +-----------------------------------+
    | NULL |
    +-----------------------------------+
  4. 위치 또는 필드 이름으로 STRUCT의 하위 필드에 접근합니다(STRUCT_ELEMENT와 동일하게 동작).

    SELECT ELEMENT_AT(NAMED_STRUCT('name', 'Jack', 'id', 1728923), 1);
    +------------------------------------------------------------+
    | ELEMENT_AT(NAMED_STRUCT('name', 'Jack', 'id', 1728923), 1) |
    +------------------------------------------------------------+
    | Jack |
    +------------------------------------------------------------+

    SELECT NAMED_STRUCT('name', 'Jack', 'id', 1728923)['id'];
    +--------------------------------------------------+
    | NAMED_STRUCT('name', 'Jack', 'id', 1728923)['id'] |
    +--------------------------------------------------+
    | 1728923 |
    +--------------------------------------------------+
  5. VARIANT의 하위 필드에 접근할 때 VARIANT 값이 OBJECT가 아니면 빈 값을 반환합니다.

    SELECT ELEMENT_AT(CAST('{"a": 1, "b": 2}' AS VARIANT), "a");
    +------------------------------------------------------+
    | ELEMENT_AT(CAST('{"a": 1, "b": 2}' AS VARIANT), "a") |
    +------------------------------------------------------+
    | 1 |
    +------------------------------------------------------+

    SELECT ELEMENT_AT(CAST('123' AS VARIANT), "");
    +----------------------------------------+
    | ELEMENT_AT(CAST('123' AS VARIANT), "") |
    +----------------------------------------+
    | |
    +----------------------------------------+