ARRAYS_ZIP
ARRAYS_ZIP
ARRAYS_ZIP() 함수는 객체 배열을 반환하는데, 각 객체는 입력 배열들의 n번째 요소에 대한 키-값 쌍을 담고 있어요. 예를 들어 반환된 배열에서 첫 번째 객체는 각 입력 배열의 첫 번째 요소에 대한 키-값 쌍을, 두 번째 객체는 각 입력 배열의 두 번째 요소에 대한 키-값 쌍을 담고 있어요.
본문
문법
ARRAYS_ZIP( <array> [ , <array> ... ] )
인자
array — 입력 배열이에요. 입력 배열들은 길이가 서로 달라도 돼요. 입력 배열 중 하나라도 구조화 배열이면 모든 입력 배열이 구조화 배열이어야 해요.
반환
다음 타입 중 하나의 값을 반환해요.
- 입력 배열이 반정형 배열이면, 함수는 구조화 객체의 반정형 배열을 반환해요.
- 입력 배열이 구조화 배열이면, 함수는 구조화 객체의 구조화 배열을 반환해요. 구조화 객체의 정의는 입력 배열의 수와 배열 안 값들의 타입에 따라 달라져요.
- 입력 배열 중 하나라도 NULL이면 함수는 NULL을 반환해요.
각 객체는 입력 배열들의 n번째 요소의 값에 대한 키-값 쌍을 담고 있어요. 키($1, $2 등)는 입력 배열의 위치를 나타내요.
예를 들어 다음 배열을 전달한다고 해 볼게요:
SELECT ARRAYS_ZIP(
[1, 2, 3],
['first', 'second', 'third'],
['i', 'ii', 'iii']
) AS zipped_arrays;
함수는 다음 객체 배열을 반환해요:
+---------------------+
| ZIPPED_ARRAYS |
|---------------------|
| [ |
| { |
| "$1": 1, |
| "$2": "first", |
| "$3": "i" |
| }, |
| { |
| "$1": 2, |
| "$2": "second", |
| "$3": "ii" |
| }, |
| { |
| "$1": 3, |
| "$2": "third", |
| "$3": "iii" |
| } |
| ] |
+---------------------+
반환된 배열에서:
- 첫 번째 객체는 모든 입력 배열의 첫 번째 요소를 담고 있어요.
- 두 번째 객체는 모든 입력 배열의 두 번째 요소를 담고 있어요.
- 세 번째 객체는 모든 입력 배열의 세 번째 요소를 담고 있어요.
객체 안의 키는 입력 배열을 식별해요:
- $1 키-값 쌍은 첫 번째 입력 배열의 값을 담아요.
- $2 키-값 쌍은 두 번째 입력 배열의 값을 담아요.
- $3 키-값 쌍은 세 번째 입력 배열의 값을 담아요.
사용 노트
- 반환된 배열은 가장 긴 입력 배열만큼 길어요. 어떤 입력 배열이 더 짧으면, 더 짧은 배열에 없는 나머지 요소에 대해 함수는 JSON null을 사용해요.
- 입력 배열이 NULL 요소를 포함하면 함수는 그 요소에 대해 JSON null을 반환해요.
예제
다음 예제들은 함수가 어떻게 동작하는지 보여줘요.
- 단일 입력 배열
- 다중 입력 배열
- 길이가 다른 입력 배열
- NULL과 빈 배열 처리
단일 입력 배열
다음 예제는 단일 배열의 첫 번째, 두 번째, 세 번째 요소를 담은 객체 배열을 반환해요:
SELECT ARRAYS_ZIP(
[1, 2, 3]
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| [ |
| { |
| "$1": 1 |
| }, |
| { |
| "$1": 2 |
| }, |
| { |
| "$1": 3 |
| } |
| ] |
+--------------+
다중 입력 배열
다음 예제는 입력 배열들의 첫 번째, 두 번째, 세 번째 요소를 담은 객체 배열을 반환해요:
SELECT ARRAYS_ZIP(
[1, 2, 3],
[10, 20, 30],
[100, 200, 300]
) AS zipped_array;
+---------------+
| ZIPPED_ARRAY |
|---------------|
| [ |
| { |
| "$1": 1, |
| "$2": 10, |
| "$3": 100 |
| }, |
| { |
| "$1": 2, |
| "$2": 20, |
| "$3": 200 |
| }, |
| { |
| "$1": 3, |
| "$2": 30, |
| "$3": 300 |
| } |
| ] |
+---------------+
길이가 다른 입력 배열
다음 예제는 길이가 다른 입력 배열을 전달해요. 더 짧은 배열에 없는 값에 대해 함수는 객체에서 JSON null을 사용해요.
SELECT ARRAYS_ZIP(
[1, 2, 3],
['one'],
['I', 'II']
) AS zipped_array;
+------------------+
| ZIPPED_ARRAY |
|------------------|
| [ |
| { |
| "$1": 1, |
| "$2": "one", |
| "$3": "I" |
| }, |
| { |
| "$1": 2, |
| "$2": null, |
| "$3": "II" |
| }, |
| { |
| "$1": 3, |
| "$2": null, |
| "$3": null |
| } |
| ] |
+------------------+
NULL과 빈 배열 처리
다음 예제에서 보듯이, 어떤 입력 배열에 NULL을 전달하면 함수는 SQL NULL을 반환해요:
SELECT ARRAYS_ZIP(
[1, 2, 3],
NULL,
[100, 200, 300]
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| NULL |
+--------------+
다음 예제에서 모든 입력 배열이 비어 있어 함수가 빈 객체를 반환해요:
SELECT ARRAYS_ZIP(
[], [], []
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| [ |
| {} |
| ] |
+--------------+
다음 예제에서 입력 배열의 일부 요소가 NULL이에요. 반환된 객체에서 이 요소들의 값은 JSON null이에요:
SELECT ARRAYS_ZIP(
[1, NULL, 3],
[NULL, 20, NULL],
[100, NULL, 300]
) AS zipped_array;
+-----------------+
| ZIPPED_ARRAY |
|-----------------|
| [ |
| { |
| "$1": 1, |
| "$2": null, |
| "$3": 100 |
| }, |
| { |
| "$1": null, |
| "$2": 20, |
| "$3": null |
| }, |
| { |
| "$1": 3, |
| "$2": null, |
| "$3": 300 |
| } |
| ] |
+-----------------+