- ์นดํ ๊ณ ๋ฆฌ:
๋ฐ์ ํ ๋ฐ ์ ํ ๋ฐ์ดํฐ ํจ์ (๋ฐฐ์ด/์ค๋ธ์ ํธ)
ARRAY_INTERSECTIONยถ
๋ ๊ฐ์ ์ ๋ ฅ ๋ฐฐ์ด์์ ์ผ์นํ๋ ์์๊ฐ ํฌํจ๋ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
์ด ํจ์๋ NULL์ ๋ํด ์์ ํฉ๋๋ค. ์ฆ, NULL์ ๊ฐ์์ ๋น๊ตํ๊ธฐ ์ํด ์๋ ค์ง ๊ฐ์ผ๋ก ์ทจ๊ธํฉ๋๋ค.
- ์ฐธ๊ณ ํญ๋ชฉ:
๊ตฌ๋ฌธยถ
ARRAY_INTERSECTION( <array1> , <array2> )
์ธ์ยถ
array1
๋น๊ตํ ์์๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด์ ๋๋ค.
array2
๋น๊ตํ ์์๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด์ ๋๋ค.
๋ฐํยถ
์ด ํจ์๋ ์ผ์นํ๋ ์
๋ ฅ ๋ฐฐ์ด์ ์์๋ฅผ ํฌํจํ๋ ARRAY
๋ฅผ ๋ฐํํฉ๋๋ค.
๊ฒน์น๋ ์์๊ฐ ์๋ ๊ฒฝ์ฐ, ํจ์๋ ๋น ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
ํ๋ ๋๋ ๋ ์ธ์๊ฐ ๋ชจ๋ NULL์ธ ๊ฒฝ์ฐ, ํจ์๋ NULL์ ๋ฐํํฉ๋๋ค.
๋ฐํ๋ ๋ฐฐ์ด ๋ด ๊ฐ์ ์์๋ ์ง์ ๋์ง ์์ต๋๋ค.
์ฌ์ฉ๋ฒ ๋ ธํธยถ
OBJECT
ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ ๋, ์ผ์นํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ ค๋ฉด ์ค๋ธ์ ํธ๊ฐ ๋์ผํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด ํญ๋ชฉ์ ์๋ ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.ARRAY_INTERSECTION
๋ฐ ๊ด๋ จARRAYS_OVERLAP
ํจ์ ์ฌ์ด์ ์ฐจ์ด์ ์ARRAYS_OVERLAP
ํจ์๋ ๋จ์ํTRUE
๋๋FALSE
๋ฅผ ๋ฐํํ๋ ๋ฐ๋ฉด,ARRAY_INTERSECTION
์ ์ค์ ์ค์ฒฉ ๊ฐ์ ๋ฐํํ๋ค๋ ๊ฒ์ ๋๋ค.Snowflake์์ ๋ฐฐ์ด์ ์ธํธ๊ฐ ์๋๋ผ ๋ค์ค ์ธํธ์ ๋๋ค. ์ฆ, ๋ฐฐ์ด์๋ ๋์ผํ ๊ฐ์ ์ฌ๋ฌ ๋ณต์ฌ๋ณธ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
ARRAY_INTERSECTION
์ ๋ค์ค ์ธํธ ์๋ฏธ ์ฒด๊ณ(๋๋ก๋ โ๋ชจ์ ์๋ฏธ ์ฒด๊ณโ๋ผ๊ณ ๋ ํจ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ๋น๊ตํฉ๋๋ค. ์ด๋ ํจ์๊ฐ ๋์ผ ๊ฐ์ ์ฌ๋ฌ ๋ณต์ฌ๋ณธ์ ๋ฐํํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ํ ๋ฐฐ์ด์ ๊ฐ์ ๋ณต์ฌ๋ณธ์ด N๊ฐ ์๊ณ , ๋ค๋ฅธ ๋ฐฐ์ด์๋ ๋์ผ ๊ฐ์ ๋ณต์ฌ๋ณธ์ด M๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ฐํ๋ ๋ฐฐ์ด์ ๋ณต์ฌ๋ณธ ์๋ N ๋๋ M ์ค ์์ ์์ ๋๋ค. ์๋ฅผ ๋ค์ด, N์ด 4์ด๊ณ M์ด 2์ธ ๊ฒฝ์ฐ, ๋ฐํ๋ ๊ฐ์๋ 2๊ฐ์ ๋ณต์ฌ๋ณธ์ด ํฌํจ๋ฉ๋๋ค.
๋ ์ธ์ ๋ชจ๋ ์ ํ ARRAY ๋๋ ๋ฐ์ ํ ARRAY ์ค ํ๋์ฌ์ผ ํฉ๋๋ค.
์ ํ ARRAY๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ:
ํจ์๋ ๋ ์ ๋ ฅ ์ ํ์ ๋ชจ๋ ์์ฉํ ์ ์๋ ์ ํ์ ARRAY๋ฅผ ๋ฐํํฉ๋๋ค.
๋ ๋ฒ์งธ ์ธ์์ ARRAY๋ ์ฒซ ๋ฒ์งธ ์ธ์์ ARRAY์ ๋น๊ต ๊ฐ๋ฅ ํด์ผ ํฉ๋๋ค.
์ยถ
์ด ์๋ ํจ์์ ๊ฐ๋จํ ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
SELECT array_intersection(ARRAY_CONSTRUCT('A', 'B'), ARRAY_CONSTRUCT('B', 'C')); +------------------------------------------------------+ | ARRAY_INTERSECTION(ARRAY_CONSTRUCT('A', 'B'), | | ARRAY_CONSTRUCT('B', 'C')) | |------------------------------------------------------| | [ | | "B" | | ] | +------------------------------------------------------+
์ธํธ์๋ ์ผ์นํ๋ ๊ฐ์ด ๋ ๊ฐ ์ด์ ์์ ์ ์์ต๋๋ค.
SELECT array_intersection(ARRAY_CONSTRUCT('A', 'B', 'C'), ARRAY_CONSTRUCT('B', 'C')); +------------------------------------------------------+ | ARRAY_INTERSECTION(ARRAY_CONSTRUCT('A', 'B', 'C'), | | ARRAY_CONSTRUCT('B', 'C')) | |------------------------------------------------------| | [ | | "B", | | "C" | | ] | +------------------------------------------------------+
๋์ผํ ์ผ์น ๊ฐ์ ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ ์ฟผ๋ฆฌ์์ ํ ๋ฐฐ์ด์๋ ๋ฌธ์ โBโ์ ๋ณต์ฌ๋ณธ์ด ์ธ ๊ฐ ์๊ณ , ๋ค๋ฅธ ๋ฐฐ์ด์๋ ๋ฌธ์ โBโ์ ๋ณต์ฌ๋ณธ์ด ๋ ๊ฐ ์์ต๋๋ค. ๊ฒฐ๊ณผ์๋ ๋ ๊ฐ์ ์ผ์น ํญ๋ชฉ์ด ํฌํจ๋ฉ๋๋ค.
SELECT array_intersection(ARRAY_CONSTRUCT('A', 'B', 'B', 'B', 'C'), ARRAY_CONSTRUCT('B', 'B')); +---------------------------------------------------------------+ | ARRAY_INTERSECTION(ARRAY_CONSTRUCT('A', 'B', 'B', 'B', 'C'), | | ARRAY_CONSTRUCT('B', 'B')) | |---------------------------------------------------------------| | [ | | "B", | | "B" | | ] | +---------------------------------------------------------------+
์ด ์๋ ๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
CREATE OR REPLACE TABLE array_demo (ID INTEGER, array1 ARRAY, array2 ARRAY, tip VARCHAR); INSERT INTO array_demo (ID, array1, array2, tip) SELECT 1, ARRAY_CONSTRUCT(1, 2), ARRAY_CONSTRUCT(3, 4), 'non-overlapping'; INSERT INTO array_demo (ID, array1, array2, tip) SELECT 2, ARRAY_CONSTRUCT(1, 2, 3), ARRAY_CONSTRUCT(3, 4, 5), 'value 3 overlaps'; INSERT INTO array_demo (ID, array1, array2, tip) SELECT 3, ARRAY_CONSTRUCT(1, 2, 3, 4), ARRAY_CONSTRUCT(3, 4, 5), 'values 3 and 4 overlap'; INSERT INTO array_demo (ID, array1, array2, tip) SELECT 4, ARRAY_CONSTRUCT(NULL, 102, NULL), ARRAY_CONSTRUCT(NULL, NULL, 103), 'NULLs overlap'; INSERT INTO array_demo (ID, array1, array2, tip) SELECT 5, array_construct(object_construct('a',1,'b',2), 1, 2), array_construct(object_construct('a',1,'b',2), 3, 4), 'the objects in the array match'; INSERT INTO array_demo (ID, array1, array2, tip) SELECT 6, array_construct(object_construct('a',1,'b',2), 1, 2), array_construct(object_construct('b',2,'c',3), 3, 4), 'neither the objects nor any other values match'; INSERT INTO array_demo (ID, array1, array2, tip) SELECT 7, array_construct(object_construct('a',1, 'b',2, 'c',3)), array_construct(object_construct('c',3, 'b',2, 'a',1)), 'the objects contain the same values, but in different order';SELECT ID, array1, array2, tip, ARRAY_INTERSECTION(array1, array2) FROM array_demo WHERE ID <= 3 ORDER BY ID; +----+--------+--------+------------------------+------------------------------------+ | ID | ARRAY1 | ARRAY2 | TIP | ARRAY_INTERSECTION(ARRAY1, ARRAY2) | |----+--------+--------+------------------------+------------------------------------| | 1 | [ | [ | non-overlapping | [] | | | 1, | 3, | | | | | 2 | 4 | | | | | ] | ] | | | | 2 | [ | [ | value 3 overlaps | [ | | | 1, | 3, | | 3 | | | 2, | 4, | | ] | | | 3 | 5 | | | | | ] | ] | | | | 3 | [ | [ | values 3 and 4 overlap | [ | | | 1, | 3, | | 3, | | | 2, | 4, | | 4 | | | 3, | 5 | | ] | | | 4 | ] | | | | | ] | | | | +----+--------+--------+------------------------+------------------------------------+
๋ค์์ NULL ๊ฐ ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
SELECT ID, array1, array2, tip, ARRAY_INTERSECTION(array1, array2) FROM array_demo WHERE ID = 4 ORDER BY ID; +----+--------------+--------------+---------------+------------------------------------+ | ID | ARRAY1 | ARRAY2 | TIP | ARRAY_INTERSECTION(ARRAY1, ARRAY2) | |----+--------------+--------------+---------------+------------------------------------| | 4 | [ | [ | NULLs overlap | [ | | | undefined, | undefined, | | undefined, | | | 102, | undefined, | | undefined | | | undefined | 103 | | ] | | | ] | ] | | | +----+--------------+--------------+---------------+------------------------------------+
์ด ์๋ OBJECT
๋ฐ์ดํฐ ํ์
์ ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
SELECT ID, array1, array2, tip, ARRAY_INTERSECTION(array1, array2) FROM array_demo WHERE ID >= 5 and ID <= 7 ORDER BY ID; +----+-------------+-------------+-------------------------------------------------------------+------------------------------------+ | ID | ARRAY1 | ARRAY2 | TIP | ARRAY_INTERSECTION(ARRAY1, ARRAY2) | |----+-------------+-------------+-------------------------------------------------------------+------------------------------------| | 5 | [ | [ | the objects in the array match | [ | | | { | { | | { | | | "a": 1, | "a": 1, | | "a": 1, | | | "b": 2 | "b": 2 | | "b": 2 | | | }, | }, | | } | | | 1, | 3, | | ] | | | 2 | 4 | | | | | ] | ] | | | | 6 | [ | [ | neither the objects nor any other values match | [] | | | { | { | | | | | "a": 1, | "b": 2, | | | | | "b": 2 | "c": 3 | | | | | }, | }, | | | | | 1, | 3, | | | | | 2 | 4 | | | | | ] | ] | | | | 7 | [ | [ | the objects contain the same values, but in different order | [ | | | { | { | | { | | | "a": 1, | "a": 1, | | "a": 1, | | | "b": 2, | "b": 2, | | "b": 2, | | | "c": 3 | "c": 3 | | "c": 3 | | | } | } | | } | | | ] | ] | | ] | +----+-------------+-------------+-------------------------------------------------------------+------------------------------------+
๋ฐฐ์ด์ ์๋ NULL ๊ฐ์ ๋น๊ต ๊ฐ๋ฅํ ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋์ง๋ง, ๋ฐฐ์ด ๋์ NULL์ ์ ๋ฌํ๋ฉด ๊ฒฐ๊ณผ๋ NULL์ ๋๋ค.
SELECT array_intersection(ARRAY_CONSTRUCT('A', 'B'), NULL); +------------------------------------------------+ | ARRAY_INTERSECTION(ARRAY_CONSTRUCT('A', 'B'), | | NULL) | |------------------------------------------------| | NULL | +------------------------------------------------+