카테고리:

반정형 및 정형 데이터 함수 (배열/오브젝트)

ARRAY_EXCEPT

다른 입력 ARRAY에 없는 한 입력 ARRAY의 요소를 포함하는 새 ARRAY 를 반환합니다.

이 함수는 NULL에 대해 안전합니다. 즉, NULL을 같음을 비교하기 위해 알려진 값으로 취급합니다.

참고 항목:

ARRAY_INTERSECTION

구문

ARRAY_EXCEPT( <source_array> , <array_of_elements_to_exclude> )
Copy

인자

source_array

새 ARRAY에 포함할 요소가 있는 배열입니다.

array_of_elements_to_exclude

새 ARRAY에서 제외할 요소가 있는 배열입니다.

반환

이 함수는 array_of_elements_to_exclude 에 없는 source_array 의 요소가 있는 ARRAY를 반환합니다.

source_array 에서 array_of_elements_to_exclude 에 있는 요소를 제외한 후 남은 요소가 없을 경우 이 함수는 빈 ARRAY를 반환합니다.

하나 또는 두 인자가 모두 NULL인 경우, 함수는 NULL을 반환합니다.

반환된 배열 내 값의 순서는 지정되지 않습니다.

사용법 노트

  • OBJECT 유형의 데이터를 비교할 때 오브젝트가 일치로 간주되려면 동일해야 합니다. 자세한 내용은 이 항목에 있는 를 참조하십시오.

  • Snowflake에서 배열은 세트가 아니라 다중 세트입니다. 다시 말해, 배열은 같은 값의 복사본을 여러 개 포함할 수 있습니다.

    ARRAY_EXCEPT 는 다중 세트 의미 체계(《모음 의미 체계》라고도 함)를 사용하여 배열을 비교합니다. source_array 가 어떤 값의 복사본을 여러 개 포함하는 경우 이 함수는 array_of_elements_to_exclude 에 지정된 해당 값의 복사본 수만 제거합니다.

    즉, source_array 에 어떤 값의 복사본이 N개 있고 array_of_elements_to_exclude 에 동일한 값의 복사본이 M개 있는 경우 이 함수는 반환된 배열에서 해당 값의 복사본 M개를 제외합니다. 반환된 배열에 있는 값의 복사본 수는 N - M개이거나, M이 N보다 크면 0개입니다.

    예를 들어 source_array 에 값이 'A' 인 요소가 5개 있고 array_of_elements_to_exclude 에 값이 'A' 인 요소가 2개 있는 경우 반환된 배열에는 값이 'A' 인 요소가 3개 있습니다.

  • 두 인자 모두 정형 ARRAY 또는 반정형 ARRAY 중 하나여야 합니다.

  • 정형 ARRAY를 전달하는 경우:

    • 두 번째 인자의 ARRAY는 첫 번째 인자의 ARRAY와 비교 가능 해야 합니다.

    • 이 함수는 첫 번째 인자의 ARRAY와 동일한 유형의 정형 ARRAY를 반환합니다.

이 섹션의 예제에서는 ARRAY 상수OBJECT 상수 를 사용하여 ARRAY와 OBJECT를 지정합니다.

다음 예제에서는 이 함수의 사용 방법을 보여줍니다.

SELECT ARRAY_EXCEPT(['A', 'B'], ['B', 'C']);

+--------------------------------------+
| ARRAY_EXCEPT(['A', 'B'], ['B', 'C']) |
|--------------------------------------|
| [                                    |
|   "A"                                |
| ]                                    |
+--------------------------------------+
Copy

다음 예제에서는 요소 'C'source_array 에 추가합니다. 반환된 ARRAY는 'C'array_of_elements_to_exclude 에도 지정되어 있으므로 'C' 를 제외합니다.

SELECT ARRAY_EXCEPT(['A', 'B', 'C'], ['B', 'C']);

+-------------------------------------------+
| ARRAY_EXCEPT(['A', 'B', 'C'], ['B', 'C']) |
|-------------------------------------------|
| [                                         |
|   "A"                                     |
| ]                                         |
+-------------------------------------------+
Copy

다음 예제에서 source_array 는 값이 'B' 인 요소를 3개 포함합니다. array_of_elements_to_exclude'B' 요소를 1개만 포함하므로, 이 함수는 'B' 요소를 1개만 제외하고 다른 'B' 요소를 2개 포함하는 ARRAY를 반환합니다.

SELECT ARRAY_EXCEPT(['A', 'B', 'B', 'B', 'C'], ['B']);

+------------------------------------------------+
| ARRAY_EXCEPT(['A', 'B', 'B', 'B', 'C'], ['B']) |
|------------------------------------------------|
| [                                              |
|   "A",                                         |
|   "B",                                         |
|   "B",                                         |
|   "C"                                          |
| ]                                              |
+------------------------------------------------+
Copy

다음 예제에서는 source_array 에서 array_of_elements_to_exclude 의 요소를 제외한 후 남는 요소가 없습니다. 결국, 이 함수는 빈 ARRAY를 반환합니다.

SELECT ARRAY_EXCEPT(['A', 'B'], ['A', 'B']);

+--------------------------------------+
| ARRAY_EXCEPT(['A', 'B'], ['A', 'B']) |
|--------------------------------------|
| []                                   |
+--------------------------------------+
Copy

다음 예제에서는 이 함수가 NULL 요소를 알려진 값으로 처리하는 방법을 보여줍니다. 앞서 설명한 것처럼, source_arrayarray_of_elements_to_exclude 보다 NULL 요소를 하나 더 포함하므로 반환된 ARRAY는 NULL 요소를 하나만 제외하고 (undefined 로 인쇄되는) 다른 요소는 포함합니다.

SELECT ARRAY_EXCEPT(['A', NULL, NULL], ['B', NULL]);

+----------------------------------------------+
| ARRAY_EXCEPT(['A', NULL, NULL], ['B', NULL]) |
|----------------------------------------------|
| [                                            |
|   "A",                                       |
|   undefined                                  |
| ]                                            |
+----------------------------------------------+
Copy

다음 예제에서 source_arrayarray_of_elements_to_exclude 는 같은 수의 NULL 요소를 포함하므로, 반환되는 ARRAY에 NULL 요소는 제외됩니다.

SELECT ARRAY_EXCEPT(['A', NULL, NULL], [NULL, 'B', NULL]);

+----------------------------------------------------+
| ARRAY_EXCEPT(['A', NULL, NULL], [NULL, 'B', NULL]) |
|----------------------------------------------------|
| [                                                  |
|   "A"                                              |
| ]                                                  |
+----------------------------------------------------+
Copy

다음 예제에서는 source_arrayarray_of_elements_to_exclude 에서 같은 오브젝트를 지정하여 반환되는 ARRAY에서 해당 오브젝트를 제외하는 방법을 보여줍니다.

SELECT ARRAY_EXCEPT([{'a': 1, 'b': 2}, 1], [{'a': 1, 'b': 2}, 3]);

+------------------------------------------------------------+
| ARRAY_EXCEPT([{'A': 1, 'B': 2}, 1], [{'A': 1, 'B': 2}, 3]) |
|------------------------------------------------------------|
| [                                                          |
|   1                                                        |
| ]                                                          |
+------------------------------------------------------------+
Copy

다음 예제에서는 NULL을 전달하면 함수에서 NULL을 반환하는 것을 보여줍니다.

SELECT ARRAY_EXCEPT(['A', 'B'], NULL);

+--------------------------------+
| ARRAY_EXCEPT(['A', 'B'], NULL) |
|--------------------------------|
| NULL                           |
+--------------------------------+
Copy