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

ELEMENT_AT

기능​

ELEMENT_AT 함수는 지정된 인덱스 또는 키를 기준으로 배열, 맵, 구조체 또는 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 객체에 접근할 때: 문자열 키입니다.
    • Doris 5.0.0 이상에서 VARIANT 배열에 접근할 때: 정수 인덱스입니다. 양수 인덱스는 1부터 시작하며, 음수 인덱스는 끝에서부터 역순으로 셉니다.

반환값​

  • ARRAY의 경우: 지정된 인덱스의 요소(T 타입)를 반환합니다.
  • MAP의 경우: 지정된 키에 해당하는 값(V 타입)을 반환합니다.
  • STRUCT의 경우: 지정된 하위 필드의 값을 반환합니다.
  • VARIANT의 경우: VARIANT 타입의 값을 반환합니다. 키가 없거나, 인덱스가 0이거나, 인덱스가 범위를 벗어나거나, 배열에 문자열 키를 사용하거나, 객체에 정수 인덱스를 사용하거나, 스칼라 값에 키를 사용하면 모두 NULL을 반환합니다.
  • 인덱스 또는 키가 존재하지 않으면 NULL을 반환합니다(STRUCT의 경우 범위를 벗어난 위치나 존재하지 않는 필드 이름을 지정하면 오류가 발생합니다).
  • 매개변수가 NULL이면 NULL을 반환합니다.

참고 사항​

  1. ARRAY와 Doris 5.0.0 이상의 VARIANT 배열 인덱스는 1부터 시작하며, 0부터 시작하지 않습니다.
  2. ARRAY 및 VARIANT 배열에 접근할 때 음수 인덱스를 지원합니다. -1은 마지막 요소를, -2는 끝에서 두 번째 요소를 나타내는 식입니다.
  3. ELEMENT_AT(container, key_or_index) 함수는 container[key_or_index]와 동일하게 동작합니다(자세한 내용은 예제 참조).
SELECT ELEMENT_AT(parse_to_variant('[10, 20, 30]'), 1);  -- 10
SELECT ELEMENT_AT(parse_to_variant('[10, 20, 30]'), 2); -- 20
SELECT ELEMENT_AT(parse_to_variant('[10, 20, 30]'), -1); -- 30
  1. VARIANT의 경우, 쿼리에서 계산된 값의 JSON null 멤버는 VARIANT null로 반환되며, 이는 SQL NULL과 다릅니다. 테이블에서 읽은 데이터에서는 배열 외부에 있는 객체의 null 멤버가 저장되지 않으므로 같은 방식으로 접근하면 SQL NULL을 반환합니다. NULL 의미론을 참조하세요.

예제​

  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에 존재하지 않는 키에 접근하면 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가 아니면 NULL을 반환합니다.

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

    SELECT ELEMENT_AT(PARSE_TO_VARIANT('123'), "");
    +-------------------------------------------+
    | ELEMENT_AT(PARSE_TO_VARIANT('123'), "") |
    +-------------------------------------------+
    | NULL |
    +-------------------------------------------+