Skip to main content
이러한 설정은 system.settings에서 확인할 수 있으며, source를 기반으로 자동 생성됩니다.

join_algorithm

어떤 JOIN 알고리즘을 사용할지 지정합니다. 여러 알고리즘을 지정할 수 있으며, 특정 쿼리에서는 kind/엄격성 및 테이블 엔진에 따라 사용 가능한 알고리즘이 선택됩니다. 가능한 값:
  • grace_hash
Grace hash 조인을 사용합니다. Grace hash는 메모리 사용을 제한하면서도 복잡한 조인을 고성능으로 처리할 수 있는 알고리즘 옵션입니다. grace 조인의 첫 번째 단계에서는 오른쪽 테이블을 읽고 키 컬럼의 해시 값에 따라 N개의 버킷으로 분할합니다(초기 N 값은 grace_hash_join_initial_buckets입니다). 이는 각 버킷을 독립적으로 처리할 수 있도록 수행됩니다. 첫 번째 버킷의 행은 메모리 내 해시 테이블에 추가되고, 나머지는 디스크에 저장됩니다. 해시 테이블이 메모리 제한을 초과하면(예: max_bytes_in_join로 설정한 경우) 버킷 수를 늘리고 각 행에 할당된 버킷을 다시 계산합니다. 현재 버킷에 속하지 않는 행은 모두 플러시되고 재할당됩니다. INNER/LEFT/RIGHT/FULL ALL/ANY JOIN을 지원합니다.
  • hash
해시 조인 알고리즘을 사용합니다. kind와 엄격성의 모든 조합을 지원하며, JOIN ON 절에서 OR로 결합된 여러 조인 키도 지원하는 가장 범용적인 구현입니다. hash 알고리즘을 사용할 때는 JOIN의 오른쪽 부분을 RAM에 업로드합니다.
  • parallel_hash
hash 조인의 변형으로, 데이터를 버킷으로 분할하고 하나의 해시 테이블 대신 여러 해시 테이블을 동시에 구축하여 이 과정을 더 빠르게 처리합니다. parallel_hash 알고리즘을 사용할 때는 JOIN의 오른쪽 부분을 RAM에 업로드합니다.
  • partial_merge
오른쪽 테이블만 완전히 정렬하는 sort-merge algorithm의 변형입니다. RIGHT JOINFULL JOINALL 엄격성에서만 지원됩니다(SEMI, ANTI, ANY, ASOF는 지원되지 않음). partial_merge 알고리즘을 사용할 때 ClickHouse는 데이터를 정렬한 뒤 디스크에 기록합니다. ClickHouse의 partial_merge 알고리즘은 고전적인 구현과 약간 다릅니다. 먼저 ClickHouse는 오른쪽 테이블을 블록 단위로 조인 키 기준 정렬하고, 정렬된 블록에 대해 MinMax 인덱스를 생성합니다. 그런 다음 왼쪽 테이블의 일부를 join key 기준으로 정렬한 뒤 오른쪽 테이블과 조인합니다. 불필요한 오른쪽 테이블 블록을 건너뛰는 데에도 MinMax 인덱스가 사용됩니다.
  • direct
direct(nested loop라고도 함) 알고리즘은 왼쪽 테이블의 행을 키로 사용해 오른쪽 테이블에서 lookup을 수행합니다. Dictionary, EmbeddedRocksDB, MergeTree 테이블과 같은 특수 스토리지에서 지원됩니다. MergeTree 테이블의 경우 이 알고리즘은 조인 키 필터를 스토리지 계층으로 직접 푸시다운합니다. 키가 테이블의 프라이머리 키 인덱스를 lookup에 사용할 수 있으면 더 효율적일 수 있지만, 그렇지 않으면 왼쪽 테이블의 각 블록마다 오른쪽 테이블 전체를 스캔합니다. INNERLEFT 조인만 지원하며, 다른 조건 없이 단일 컬럼 동등 조인 키만 지원합니다.
  • auto
auto로 설정하면 먼저 hash 조인을 시도하고, 메모리 제한을 초과하면 실행 중에 다른 알고리즘으로 전환합니다.
  • full_sorting_merge
조인 전에 조인 대상 테이블을 완전히 정렬하는 Sort-merge algorithm입니다.
  • prefer_partial_merge
ClickHouse는 가능하면 항상 partial_merge 조인을 사용하려고 시도하며, 그렇지 않으면 hash를 사용합니다. Deprecated이며, partial_merge,hash와 같습니다.
  • default (deprecated)
레거시 값이므로 더 이상 사용하지 마십시오. direct,hash와 같으며, 즉 direct 조인과 hash 조인을 이 순서대로 사용하려고 시도합니다.

join_any_take_last_row

오른쪽 테이블에서 하나의 키에 일치하는 행이 여러 개 있을 때 ANY 엄격성을 사용하는 JOIN 작업의 동작을 변경합니다.
이 설정은 Join 테이블 엔진을 사용하는 테이블과 해시 기반 조인 알고리즘에 적용됩니다.조인이 병렬로 구성되면 행의 순서가 비결정적일 수 있습니다. 즉, join_any_take_last_row = 1ANY JOIN 쿼리에서 비결정적인 행을 반환할 수 있습니다.
가능한 값:
  • 0 — 오른쪽 테이블에 일치하는 행이 여러 개 있으면, 먼저 발견된 행만 조인됩니다.
  • 1 — 오른쪽 테이블에 일치하는 행이 여러 개 있으면, 마지막에 발견된 행만 조인됩니다.
관련 항목:

join_default_strictness

JOIN 절의 기본 엄격성을 설정합니다. 가능한 값:
  • ALL — 오른쪽 테이블에 일치하는 행이 여러 개 있으면 ClickHouse는 일치하는 행들로 카테시안 곱을 생성합니다. 이는 표준 SQL의 일반적인 JOIN 동작입니다.
  • ANY — 오른쪽 테이블에 일치하는 행이 여러 개 있으면, 먼저 찾은 첫 번째 행만 조인됩니다. 오른쪽 테이블에 일치하는 행이 하나뿐이면 ANYALL의 결과는 같습니다.
  • ASOF — 정확히 일치하지 않는 시퀀스를 조인할 때 사용합니다.
  • 빈 문자열 — 쿼리에서 ALL 또는 ANY를 지정하지 않으면 ClickHouse가 예외를 발생시킵니다.

join_on_disk_max_files_to_merge

디스크에서 실행되는 MergeJoin 작업의 병렬 정렬에 사용할 수 있는 파일 수를 제한합니다. 이 설정값이 클수록 더 많은 RAM을 사용하고, 필요한 디스크 I/O는 줄어듭니다. 가능한 값:
  • 2 이상의 모든 양의 정수.

join_output_by_rowlist_perkey_rows_threshold

해시 조인에서 행 목록으로 출력할지 결정할 때 사용하는, 오른쪽 테이블의 키별 평균 행 수 하한값입니다.

join_overflow_mode

조인이 다음 제한 중 하나에 도달할 때 ClickHouse가 수행할 동작을 정의합니다: 이 설정은 join_algorithm 값이 hash 또는 parallel_hash일 때만 적용됩니다. 다른 알고리즘(예: partial_merge, grace_hash, auto)은 이러한 제한을 디스크로 스필하거나, 다시 파티셔닝하거나, 전략을 전환하는 방식으로 다르게 처리합니다. 자세한 내용은 join_algorithm을 참조하십시오. 가능한 값:
  • THROW — ClickHouse는 예외를 발생시키고 쿼리를 중지합니다.
  • BREAK — ClickHouse는 쿼리를 중지하고 예외를 발생시키지 않습니다.
기본값: THROW. 관련 항목

join_use_nulls

JOIN의 동작 방식을 설정합니다. 테이블을 병합할 때 빈 셀이 생길 수 있습니다. ClickHouse는 이 설정에 따라 이를 서로 다르게 채웁니다. 가능한 값:
  • 0 — 빈 셀은 해당 필드 유형의 기본값으로 채워집니다.
  • 1 — JOIN은 표준 SQL과 동일하게 동작합니다. 해당 필드의 유형은 Nullable로 변환되며, 빈 셀은 NULL로 채워집니다.
마지막 수정일 2026년 7월 23일