join_algorithm
- grace_hash
grace_hash_join_initial_buckets입니다). 이는 각 버킷을 독립적으로 처리할 수 있도록 수행됩니다. 첫 번째 버킷의 행은 메모리 내 해시 테이블에 추가되고, 나머지는 디스크에 저장됩니다. 해시 테이블이 메모리 제한을 초과하면(예: max_bytes_in_join로 설정한 경우) 버킷 수를 늘리고 각 행에 할당된 버킷을 다시 계산합니다. 현재 버킷에 속하지 않는 행은 모두 플러시되고 재할당됩니다.
INNER/LEFT/RIGHT/FULL ALL/ANY JOIN을 지원합니다.
- hash
JOIN ON 절에서 OR로 결합된 여러 조인 키도 지원하는 가장 범용적인 구현입니다.
hash 알고리즘을 사용할 때는 JOIN의 오른쪽 부분을 RAM에 업로드합니다.
- parallel_hash
hash 조인의 변형으로, 데이터를 버킷으로 분할하고 하나의 해시 테이블 대신 여러 해시 테이블을 동시에 구축하여 이 과정을 더 빠르게 처리합니다.
parallel_hash 알고리즘을 사용할 때는 JOIN의 오른쪽 부분을 RAM에 업로드합니다.
- partial_merge
RIGHT JOIN과 FULL JOIN은 ALL 엄격성에서만 지원됩니다(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에 사용할 수 있으면 더 효율적일 수 있지만, 그렇지 않으면 왼쪽 테이블의 각 블록마다 오른쪽 테이블 전체를 스캔합니다.
INNER 및 LEFT 조인만 지원하며, 다른 조건 없이 단일 컬럼 동등 조인 키만 지원합니다.
- auto
auto로 설정하면 먼저 hash 조인을 시도하고, 메모리 제한을 초과하면 실행 중에 다른 알고리즘으로 전환합니다.
- full_sorting_merge
- prefer_partial_merge
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 = 1은 ANY JOIN 쿼리에서 비결정적인 행을 반환할 수 있습니다.- 0 — 오른쪽 테이블에 일치하는 행이 여러 개 있으면, 먼저 발견된 행만 조인됩니다.
- 1 — 오른쪽 테이블에 일치하는 행이 여러 개 있으면, 마지막에 발견된 행만 조인됩니다.
join_default_strictness
ALL— 오른쪽 테이블에 일치하는 행이 여러 개 있으면 ClickHouse는 일치하는 행들로 카테시안 곱을 생성합니다. 이는 표준 SQL의 일반적인JOIN동작입니다.ANY— 오른쪽 테이블에 일치하는 행이 여러 개 있으면, 먼저 찾은 첫 번째 행만 조인됩니다. 오른쪽 테이블에 일치하는 행이 하나뿐이면ANY와ALL의 결과는 같습니다.ASOF— 정확히 일치하지 않는 시퀀스를 조인할 때 사용합니다.빈 문자열— 쿼리에서ALL또는ANY를 지정하지 않으면 ClickHouse가 예외를 발생시킵니다.
join_on_disk_max_files_to_merge
- 2 이상의 모든 양의 정수.
join_output_by_rowlist_perkey_rows_threshold
join_overflow_mode
join_algorithm
값이 hash 또는 parallel_hash일 때만 적용됩니다. 다른
알고리즘(예: partial_merge, grace_hash, auto)은 이러한
제한을 디스크로 스필하거나, 다시 파티셔닝하거나, 전략을 전환하는 방식으로
다르게 처리합니다. 자세한 내용은
join_algorithm을 참조하십시오.
가능한 값:
THROW— ClickHouse는 예외를 발생시키고 쿼리를 중지합니다.BREAK— ClickHouse는 쿼리를 중지하고 예외를 발생시키지 않습니다.
THROW.
관련 항목