JOIN 연산에 사용할 수 있는 선택적 사전 준비 데이터 구조입니다.
테이블 생성하기
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])CREATE TABLE 쿼리의 자세한 설명을 참조하십시오.
엔진 매개변수
join_strictness
join_strictness – JOIN 엄격성.
join_type
join_type – JOIN 타입.
키 컬럼
k1[, k2, ...] – JOIN 연산에 사용되는 USING 절의 키 컬럼입니다.
join_strictness 및 join_type 매개변수는 따옴표 없이 입력하십시오. 예: Join(ANY, LEFT, col1). 이 값은 해당 테이블을 사용할 JOIN 연산과 일치해야 합니다. 매개변수가 일치하지 않으면 ClickHouse는 예외를 발생시키지 않으며 잘못된 데이터를 반환할 수 있습니다.
세부 정보 및 권장 사항
데이터 저장
Join 테이블 데이터는 항상 RAM에 저장됩니다. 테이블에 행을 삽입할 때 ClickHouse는 서버 재시작 시 데이터를 복원할 수 있도록 데이터 블록을 디스크의 디렉터리에 기록합니다.
서버가 비정상적으로 재시작되면 디스크의 데이터 블록이 손실되거나 손상될 수 있습니다. 이 경우 손상된 데이터가 들어 있는 파일을 수동으로 삭제해야 할 수 있습니다.
데이터 조회 및 삽입
INSERT 쿼리를 사용해 Join 엔진 테이블에 데이터를 추가할 수 있습니다. 테이블이 ANY 엄격성으로 생성된 경우, 중복 키의 데이터는 무시됩니다. ALL 엄격성에서는 모든 행이 추가됩니다.
Join 엔진 테이블의 주요 사용 사례는 다음과 같습니다:
- 테이블을
JOIN절의 오른쪽에 둡니다. - joinGet 함수를 호출합니다. 이 함수를 사용하면 딕셔너리와 같은 방식으로 테이블에서 데이터를 추출할 수 있습니다.
데이터 삭제
Join 엔진 테이블에 대한 ALTER DELETE 쿼리는 뮤테이션으로 구현됩니다. DELETE 뮤테이션은 필터링된 데이터를 읽은 뒤 메모리와 디스크의 데이터를 덮어씁니다.
제한 사항 및 설정
테이블을 생성할 때 다음 설정이 적용됩니다:
join_use_nulls
max_rows_in_join
max_bytes_in_join
join_overflow_mode
join_any_take_last_row
join_use_nulls
Persistent
Join 및 Set 테이블 엔진의 영속성을 비활성화합니다.
I/O 오버헤드를 줄입니다. 성능을 우선하고 영속성이 필요하지 않은 시나리오에 적합합니다.
가능한 값:
- 1 — 활성화됨.
- 0 — 비활성화됨.
기본값: 1.
Join 엔진 테이블은 GLOBAL JOIN 연산에서 사용할 수 없습니다.
Join 엔진에서는 CREATE TABLE 문에서 join_use_nulls 설정을 지정할 수 있습니다. SELECT 쿼리에서도 join_use_nulls 값이 동일해야 합니다.
사용 예시
왼쪽 테이블 생성:
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;INSERT INTO id_val VALUES (1,11), (2,12), (3,13);오른쪽 Join 테이블 생성하기:
CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id);INSERT INTO id_val_join VALUES (1,21), (1,22), (3,23);테이블 조인:
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id);┌─id─┬─val─┬─id_val_join.val─┐
│ 1 │ 11 │ 21 │
│ 2 │ 12 │ 0 │
│ 3 │ 13 │ 23 │
└────┴─────┴─────────────────┘또는 조인 키 값을 지정해 Join 테이블에서 데이터를 가져올 수 있습니다:
SELECT joinGet('id_val_join', 'val', toUInt32(1));┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│ 21 │
└────────────────────────────────────────────┘Join 테이블에서 행 삭제하기:
ALTER TABLE id_val_join DELETE WHERE id = 3;┌─id─┬─val─┐
│ 1 │ 21 │
└────┴─────┘