ARRAYS_ZIP

ARRAYS_ZIP

ARRAYS_ZIP() 함수는 객체 배열을 반환하는데, 각 객체는 입력 배열들의 n번째 요소에 대한 키-값 쌍을 담고 있어요. 예를 들어 반환된 배열에서 첫 번째 객체는 각 입력 배열의 첫 번째 요소에 대한 키-값 쌍을, 두 번째 객체는 각 입력 배열의 두 번째 요소에 대한 키-값 쌍을 담고 있어요.

출처: Snowflake SQL Reference

본문

문법

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   |
|   }             |
| ]               |
+-----------------+

더 알아보기 (Learn more)