Ken
ClickHouse는 대규모 데이터 분석을 위한 초고속 OLAP 데이터베이스로, 초기에는 JOIN 기능이 매우 제한적이었으나, 지속적인 발전을 통해 현재는 표준 SQL JOIN뿐만 아니라 초대형 데이터셋에 특화된 다양한 조인 알고리즘과 최적화 기능을 지원하고 있습니다. 이 페이지에서는 2016년 오픈소스 공개 이후 2025년 최신 버전까지 ClickHouse JOIN 기능의 발전사를 기술합니다.
2016–2018: 기본 JOIN 지원과 Join 엔진 도입
ClickHouse가 처음 오픈소스로 공개됐을 때 JOIN 기능은 매우 제한적이었습니다. 한 쿼리에서 하나의 JOIN만 사용할 수 있었고, 동등 조인(=)만 지원됐으며, INNER JOIN과 LEFT OUTER JOIN만 제공되었습니다. RIGHT JOIN과 FULL OUTER JOIN은 미지원이거나 불완전했습니다.
이 시기 ClickHouse만의 독특한 개념으로 ANY JOIN이 도입되었습니다. ANY JOIN은 우측 테이블에서 일치하는 첫 번째 행만 반환하여, 다대다 관계에서 결과 중복과 성능 저하를 방지했습니다. 반면, ALL JOIN은 표준 SQL과 같이 모든 일치 행을 반환합니다. 2018년 join_default_strictness 설정이 추가되어, 기본 조인 엄격성을 ALL로 변경해 SQL 표준 호환성을 높였습니다. 또한, join_use_nulls 옵션이 도입되어 OUTER JOIN에서 매칭되지 않는 컬럼에 NULL을 반환할 수 있게 되었습니다.
2018년에는 Join Table Engine이 도입되어, 우측 테이블 데이터를 미리 메모리에 적재해 반복적인 조인에서 디스크 접근 없이 빠른 해시 테이블 조회가 가능해졌습니다. joinGet 함수도 함께 등장해, Join 엔진 테이블을 외부 딕셔너리처럼 활용할 수 있게 했습니다[1].
2019: JOIN 유형 확장과 다중 JOIN 지원
2019년은 ClickHouse JOIN 기능의 대전환기였습니다. RIGHT JOIN과 FULL OUTER JOIN이 완전히 지원되기 시작해, 표준 SQL의 모든 JOIN 유형을 사용할 수 있게 되었습니다. 이로써 데이터 반정규화 없이도 다양한 관계형 조인을 ClickHouse에서 구현할 수 있는 기반이 마련되었습니다.
또한, 한 쿼리에서 여러 개의 JOIN을 사용할 수 있게 개선되었습니다. 초기에는 실험적 옵션(allow_experimental_multiple_joins_emulation) 하에 제한적으로 제공됐으나, 곧 안정화되어 일반적인 SQL 다중 JOIN 쿼리가 가능해졌습니다.
이 해에는 시계열 분석에 최적화된 ASOF JOIN이 도입되어, 근접한 시점의 값 조인 등 복잡한 시간 기반 조인을 간결하게 구현할 수 있게 되었습니다. ASOF JOIN은 거래 시점에 가장 가까운 가격 정보 등, 정확히 일치하지 않는 키를 근사 매칭할 때 매우 유용합니다.
분산 조인(distributed_product_mode), CROSS JOIN 자동 변환, ANY JOIN의 안전성 강화 등도 이 시기 이루어졌습니다. ANY JOIN은 2019년 후반부터 RIGHT/FULL 조인에서 기본 비활성화되고, 2020년부터는 우측 테이블 키가 고유하지 않으면 에러를 내도록 변경되어 결과의 결정성을 보장했습니다.
2020–2021: ANSI SQL 호환성 강화와 Merge JOIN 알고리즘 도입
2020년에는 SQL 표준의 SEMI JOIN, ANTI JOIN이 도입되어, EXISTS/IN, NOT EXISTS/NOT IN 서브쿼리 없이도 존재성 기반 필터링 조인을 효율적으로 수행할 수 있게 되었습니다.
이 시기 가장 큰 변화는 대용량 조인에서 메모리 부족 문제를 해결하기 위해 Merge Join 계열 알고리즘이 도입된 것입니다. Partial Merge Join은 우측 테이블을 전량 정렬하고, 좌측은 블록 단위로 처리해 메모리 사용을 줄입니다. Full Sorting Merge Join은 양쪽 테이블 모두 정렬 후 병합하여, 입력 데이터가 이미 정렬돼 있다면 매우 빠른 성능을 보입니다.
join_algorithm 설정을 통해 auto/hash/partial_merge/full_sorting_merge/prefer_partial_merge 등 다양한 조인 전략을 지정할 수 있게 되었고, ClickHouse는 상황에 따라 자동으로 최적의 알고리즘을 선택할 수 있게 되었습니다.
2022–2023: 해시 조인 고도화와 Grace Hash/Direct Join 도입
2022년에는 Parallel Hash Join(병렬 해시 조인)이 도입되어, 대형 우측 테이블 조인 시 해시 테이블 구축 단계를 여러 스레드로 병렬화함으로써 속도를 크게 향상시켰습니다. 이 기능은 max_threads 설정에 따라 수십 개의 해시 테이블을 병렬 생성해, 기존 대비 수배 빠른 조인 성능을 제공합니다.
22.12 버전에는 Grace Hash Join이 추가되어, 메모리 한계를 넘는 대용량 조인에서 해시 테이블을 파티셔닝해 디스크에 저장하고 처리함으로써, 수백 GB~TB급 데이터 조인도 가능해졌습니다. Grace Hash Join은 정렬이 필요 없는 외부 해시 조인 방식으로, Partial Merge Join 대비 성능상 이점이 있습니다[2][3][4].
2023년에는 Join 엔진 테이블이나 외부 Dictionary를 활용한 Direct Join 알고리즘이 공식화되었습니다. Direct Join은 우측 테이블이 이미 메모리에 로드된 키-값 저장소 형태일 때, 별도의 해시 테이블 구축 없이 즉각적인 조회로 조인을 수행해 실시간 분석에 최적화된 성능을 제공합니다. 주로 LEFT ANY JOIN 등에 적용됩니다[5]
2024–2025: 최신 JOIN 성능 혁신과 분산 조인 최적화
2024년 이후 ClickHouse는 JOIN 성능 개선에 더욱 박차를 가하고 있습니다. 24.8 LTS, 25.1, 25.2 등 최신 릴리스에서는 병렬 해시 조인(Parallel Hash Join)과 Grace Hash Join의 성능이 지속적으로 최적화되고 있습니다. 2단계 해시맵(two-level hash map) 구조 도입 등으로 대용량 조인에서 30~36% 이상의 속도 개선이 보고되었습니다. JOIN 알고리즘의 probe phase(탐색 단계) 최적화, 멀티스레드 파이프라인, 메모리 사용량 감소 등도 꾸준히 반영되고 있습니다[1][3][6].
2025년 25.x 버전에서는 분산 환경에서의 조인 최적화가 강화되었습니다. 분산 테이블의 셔딩 키가 일치하는 경우 각 샤드에서 로컬 조인을 수행하고 결과를 합치는 방식, 셔딩 키가 달라도 조인 키 기준으로 리셔플(재분배)하여 효율적으로 조인을 처리하는 기능이 추가되어, 대규모 분산 클러스터 환경에서 JOIN 성능과 네트워크 효율이 크게 향상되었습니다.
ClickHouse JOIN 기능 도입 연혁 요약
기능/유형 | 도입 시기(버전) | 주요 특징 및 발전 |
ANY/ALL JOIN | 2016년~ | ANY: 중복 억제, ALL: 표준 동작, 2018년 ALL 기본값 변경 |
INNER/LEFT OUTER JOIN | 2016년~ | 기본 지원, 2018년 join_use_nulls 도입 |
RIGHT/FULL OUTER JOIN | 2018~2019년 | 표준 SQL 완전 지원 |
CROSS JOIN | 2016년~ | 컴마 구문→CROSS로 표준화(2019) |
Join Table Engine | 2018년 | 메모리 해시 테이블 사전 적재, joinGet 함수 |
Distributed JOIN | 2016년~ | local/global 모드, 2025년 동적 셔플 최적화 |
다중 JOIN | 2019년 | 한 쿼리 내 여러 JOIN 지원 |
ASOF JOIN | 2019년 | 근사 시점 조인, 시계열 분석 특화 |
SEMI/ANTI JOIN | 2020년 | EXISTS/NOT EXISTS 대체, SQL 표준화 |
Hash Join | 2016년~ | 기본 해시 테이블 기반 조인 |
Parallel Hash Join | 2022년 | 해시 테이블 병렬 구축, 대용량 조인 가속 |
Grace Hash Join | 2022년 | 디스크 기반 외부 해시 조인, 초대형 데이터 지원 |
Partial/Full Merge Join | 2020년 | 정렬 기반 병합 조인, 메모리 절감 |
Direct Join | 2023년 | 사전 적재된 키-값 구조 즉시 조회 |
결론
ClickHouse의 JOIN 기능은 초기의 단순 해시 조인에서 출발해, SQL 표준 완전 지원, 대용량/분산/실시간 분석 특화 알고리즘, 자동 튜닝 및 다양한 최적화 옵션까지 폭넓게 발전해왔습니다. 현재는 6종 이상의 내부 조인 알고리즘을 제공하며, 사용자는 쿼리 특성에 맞춰 최적의 전략을 선택하거나 ClickHouse의 자동 선택 기능을 활용할 수 있습니다. 이러한 진화는 ClickHouse가 초대형 데이터 환경에서도 JOIN 제약 없이 빠르고 안정적으로 분석을 수행할 수 있게 한 핵심 동력입니다.