최종 수정: 에
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을 반환합니다.
참고 사항
- ARRAY와 Doris 5.0.0 이상의 VARIANT 배열 인덱스는 1부터 시작하며, 0부터 시작하지 않습니다.
- ARRAY 및 VARIANT 배열에 접근할 때 음수 인덱스를 지원합니다.
-1은 마지막 요소를,-2는 끝에서 두 번째 요소를 나타내는 식입니다. 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
VARIANT의 경우, 쿼리에서 계산된 값의 JSONnull멤버는 VARIANTnull로 반환되며, 이는 SQLNULL과 다릅니다. 테이블에서 읽은 데이터에서는 배열 외부에 있는 객체의null멤버가 저장되지 않으므로 같은 방식으로 접근하면 SQLNULL을 반환합니다. NULL 의미론을 참조하세요.
예제
-
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 |
+--------------+ -
배열 인덱스는 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 |
+--------------------------+ -
MAP에 존재하지 않는 키에 접근하면NULL을 반환합니다.SELECT ELEMENT_AT({"a": 1, "b": 2}, "c");
+-----------------------------------+
| ELEMENT_AT({"a": 1, "b": 2}, "c") |
+-----------------------------------+
| NULL |
+-----------------------------------+ -
위치 또는 필드 이름으로
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 |
+--------------------------------------------------+ -
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 |
+-------------------------------------------+