Skip to main content
이 함수는 매우 독특한 함수입니다. 일반 함수는 행 집합을 바꾸지 않고 각 행의 값만 변경합니다(map). 집계 함수는 행 집합을 압축합니다(fold 또는 reduce). arrayJoin 함수는 각 행을 여러 행의 집합으로 펼칩니다(unfold). 이 함수는 배열을 인수로 받아, 배열의 원소 수만큼 원본 행을 여러 개의 행으로 확장합니다. 모든 컬럼의 값은 단순히 복사되지만, 이 함수가 적용된 컬럼의 값만 예외로 해당 배열의 각 값으로 대체됩니다.
배열이 비어 있으면 arrayJoin은 아무 행도 생성하지 않습니다. 배열 유형의 기본값을 포함한 단일 행을 반환하려면 emptyArrayToSingle로 감쌀 수 있습니다. 예: arrayJoin(emptyArrayToSingle(...)).
예시:
Query
Response
arrayJoin 함수는 WHERE 절을 포함한 쿼리의 모든 부분에 영향을 줍니다. 아래 쿼리의 결과는 서브쿼리가 1개의 행을 반환했음에도 2라는 점에 유의하십시오.
Query
Response
한 가지 예외가 있습니다. unnest 별칭을 통한 사용을 포함해 arrayJoin은 조인 과정에서 평가되는 JOIN ON 조건에서는 허용되지 않습니다. 이러한 조건은 행 수를 유지해야 하며, 조인된 행의 각 배치별로 별도로 평가되기 때문입니다. 한쪽에만 적용되는 조건과 arrayJoin을 사용하는 동등 키는 조인 전에 추출되므로 영향을 받지 않습니다. OR 조건이 없는 ALL INNER JOIN 조건도 영향을 받지 않습니다. 이 경우에는 조건이 조인 후에 적용되기 때문입니다. 확장이 한쪽에만 의존하는 경우 조인 전에 서브쿼리의 ARRAY JOIN으로 옮기십시오. arrayJoin 인수가 양쪽의 컬럼을 참조하는 조건은 구조를 변경해야 합니다. 하나의 쿼리에서 여러 arrayJoin 함수를 사용할 수 있습니다. 이 경우 변환이 여러 번 수행되어 행 수가 늘어납니다. 예시:
Query
Response

모범 사례

동일한 표현식에 arrayJoin을 여러 번 사용하면 공통 부분 표현식이 제거되어 예상한 결과가 나오지 않을 수 있습니다. 이 경우에는 조인 결과에 영향을 주지 않는 추가 연산을 사용해 반복되는 배열 표현식을 변형하는 것이 좋습니다. 예를 들어 arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, [])) 예시:
Query
더 폭넓게 활용할 수 있도록 해주는 SELECT 쿼리의 ARRAY JOIN 구문에 유의하십시오. ARRAY JOIN을 사용하면 요소 수가 같은 여러 배열을 한 번에 변환할 수 있습니다. 예시:
Query
Response
또는 Tuple을 사용할 수 있습니다 예시:
Query
Row
ClickHouse에서 arrayJoin이라는 이름은 JOIN 연산과 개념적으로 비슷하지만, 이를 단일 행 내부의 배열에 적용한다는 점에서 유래했습니다. 기존 JOIN은 서로 다른 테이블의 행을 결합하지만, arrayJoin은 한 행에 있는 배열의 각 요소를 “조인”하듯 펼쳐 각 배열 요소마다 하나의 행을 만들고, 나머지 컬럼 값은 그대로 복제합니다. ClickHouse는 ARRAY JOIN 절 구문도 제공하는데, 익숙한 SQL JOIN 용어를 사용해 이러한 기존 JOIN 연산과의 관계를 더욱 분명하게 보여줍니다. 이 과정은 배열을 “펼친다”고도 표현하지만, 함수 이름과 절 모두에서 “join”이라는 용어를 사용하는 이유는 테이블을 배열 요소와 조인하는 것처럼 보이기 때문이며, 결과적으로 데이터셋을 JOIN 연산과 유사한 방식으로 확장합니다.
마지막 수정일 2026년 8월 18일