arrayJoin 함수는 각 행을 여러 행의 집합으로 펼칩니다(unfold).
이 함수는 배열을 인수로 받아, 배열의 원소 수만큼 원본 행을 여러 개의 행으로 확장합니다.
모든 컬럼의 값은 단순히 복사되지만, 이 함수가 적용된 컬럼의 값만 예외로 해당 배열의 각 값으로 대체됩니다.
배열이 비어 있으면
arrayJoin은 아무 행도 생성하지 않습니다.
배열 유형의 기본값을 포함한 단일 행을 반환하려면 emptyArrayToSingle로 감쌀 수 있습니다. 예: arrayJoin(emptyArrayToSingle(...)).Query
Response
arrayJoin 함수는 WHERE 절을 포함한 쿼리의 모든 부분에 영향을 줍니다. 아래 쿼리의 결과는 서브쿼리가 1개의 행을 반환했음에도 2라는 점에 유의하십시오.
Query
Response
arrayJoin 함수를 사용할 수 있습니다. 이 경우 변환이 여러 번 수행되어 행 수가 늘어납니다.
예시:
Query
Response
모범 사례
arrayJoin을 여러 번 사용하면 공통 부분 표현식이 제거되어 예상한 결과가 나오지 않을 수 있습니다.
이 경우에는 조인 결과에 영향을 주지 않는 추가 연산을 사용해 반복되는 배열 표현식을 변형하는 것이 좋습니다. 예를 들어 arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, []))
예시:
Query
ARRAY JOIN 구문에 유의하십시오.
ARRAY JOIN을 사용하면 요소 수가 같은 여러 배열을 한 번에 변환할 수 있습니다.
예시:
Query
Response
Tuple을 사용할 수 있습니다
예시:
Query
Row
arrayJoin이라는 이름은 JOIN 연산과 개념적으로 비슷하지만, 이를 단일 행 내부의 배열에 적용한다는 점에서 유래했습니다. 기존 JOIN은 서로 다른 테이블의 행을 결합하지만, arrayJoin은 한 행에 있는 배열의 각 요소를 “조인”하듯 펼쳐 각 배열 요소마다 하나의 행을 만들고, 나머지 컬럼 값은 그대로 복제합니다. ClickHouse는 ARRAY JOIN 절 구문도 제공하는데, 익숙한 SQL JOIN 용어를 사용해 이러한 기존 JOIN 연산과의 관계를 더욱 분명하게 보여줍니다. 이 과정은 배열을 “펼친다”고도 표현하지만, 함수 이름과 절 모두에서 “join”이라는 용어를 사용하는 이유는 테이블을 배열 요소와 조인하는 것처럼 보이기 때문이며, 결과적으로 데이터셋을 JOIN 연산과 유사한 방식으로 확장합니다.