최종 수정: 에
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부터 시작하며, 0부터 시작하지 않습니다.
- 음수 인덱스를 지원합니다.
-1은 마지막 요소를,-2는 끝에서 두 번째 요소를 나타내며, 이후에도 같은 방식으로 적용됩니다. ELEMENT_AT(container, key_or_index)함수는container[key_or_index]와 동일하게 동작합니다(자세한 내용은 예제 참조).
예제
-
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에서 존재하지 않는 KEY에 접근하면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가 아니면 빈 값을 반환합니다.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), "") |
+----------------------------------------+
| |
+----------------------------------------+