ARRAY JOIN
배열 컬럼의 원소 각각을 별도의 행으로 펼치는 SQL 절. N개짜리 배열이 있는 행 하나가 N개 행으로 바뀌고, 여러 배열을 동시에 펼치면 인덱스끼리 짝짓는(zip) 방식으로 동작한다.
ARRAY JOIN 절 — 배열 하나를 여러 행으로 펼친다
· ClickHouse 공식문서 ARRAY JOIN Clause
Learn · Glossary
총 49개 용어
배열 컬럼의 원소 각각을 별도의 행으로 펼치는 SQL 절. N개짜리 배열이 있는 행 하나가 N개 행으로 바뀌고, 여러 배열을 동시에 펼치면 인덱스끼리 짝짓는(zip) 방식으로 동작한다.
ARRAY JOIN 절 — 배열 하나를 여러 행으로 펼친다
· ClickHouse 공식문서 ARRAY JOIN Clause
들어오는 INSERT를 즉시 파트로 만들지 않고 서버 메모리 버퍼에 모아 하나의 배치로 flush하는 설정. 클라이언트가 직접 배칭 로직을 구현할 필요 없이 서버가 대신 소량 INSERT를 통합해준다.
async_insert — 배칭 책임을 클라이언트에서 서버로 옮기기
· ClickHouse 공식 문서 Asynchronous inserts
쓰기 데이터를 RAM에 버퍼링했다가 주기적으로 다른 대상 테이블로 플러시하는 ClickHouse의 특수 테이블 엔진. num_layers로 병렬 버퍼 레이어 수를 조절하고, min*/max* 조건으로 플러시 시점을 제어한다.
Buffer 테이블 엔진 — 클라이언트가 직접 메모리 버퍼에 쓰는 대안
· ClickHouse 공식문서 Buffer table engine
반정형 데이터를 위한 컬럼 타입. 삽입된 JSON의 각 고유 경로를 독립된 Dynamic 타입 서브컬럼으로 컬럼 지향 저장해, 스키마 유연성과 타입 컬럼에 가까운 압축률·조회 성능을 함께 얻는다. 25.3에서 GA.
JSON 타입 — 각 경로를 독립된 서브컬럼으로 저장한다
· ClickHouse 공식문서 JSON Data Type, 공식 블로그 A new powerful JSON data type
ZooKeeper를 대체하는 ClickHouse 내장 조율 서비스. Raft 합의 알고리즘을 쓰며 ZooKeeper와 와이어 프로토콜이 호환돼 드롭인 교체가 가능하다.
복제(ReplicatedMergeTree)와 ClickHouse Keeper — 메타데이터 조율과 데이터 페치
· ClickHouse 공식 문서 Replicated table engines
Sign 컬럼(+1 state/-1 cancel)을 이용해, 병합 시 같은 정렬 키를 가진 state·cancel 행 쌍을 상쇄시켜 지우는 MergeTree 변형. 삽입 순서(state가 cancel보다 먼저)에 의존한다는 제약이 있다.
CollapsingMergeTree/VersionedCollapsingMergeTree — Sign 컬럼으로 행을 상쇄시킨다
· ClickHouse 공식문서 CollapsingMergeTree, VersionedCollapsingMergeTree
ClickHouse의 기본 CTE 동작. WITH 절로 정의한 서브쿼리를 결과로 저장해 재사용하는 게 아니라, SELECT 안에서 그 CTE를 참조하는 지점마다 서브쿼리 자체를 그대로 치환해 매번 재실행한다.
WITH 절(CTE) — 기본은 매번 다시 실행되는 인라인 치환이다
· ClickHouse 공식문서 WITH Clause
그래뉼 단위로 특정 컬럼의 요약 정보(min/max, 값 집합, 확률적 멤버십 등)를 미리 계산해두는 2차 인덱스. 조건을 만족할 수 없는 그래뉼을 읽지 않고 건너뛰게 해준다.
Data Skipping Index — 프라이머리 키 밖의 컬럼을 가속하기
· ClickHouse 공식 문서 Use data skipping indices where appropriate
ALTER TABLE ... DETACH PARTITION은 파티션 데이터를 detached 디렉터리로 옮겨 테이블에서 비활성화(삭제는 아님)하고, ATTACH PARTITION은 그 디렉터리의 데이터를 체크섬 검증 후 다시 활성 파트로 편입시킨다. 데이터 이동·백업 복구·손상 데이터 교체·무중단 스키마 변경에 쓰인다.
ATTACH/DETACH PARTITION — 파티션째로 뽑아내고 다시 끼워 넣는다
· ClickHouse 공식문서 ALTER TABLE ... PARTITION
ClickHouse에서 자주 참조되는 작은 참조 데이터를 메모리 구조로 미리 적재해두고 dictGet 함수로 즉시 조회하도록 만든 키-값 매핑 객체. JOIN 대신 쓰여 조회 성능을 높인다.
Dictionary — 조인 대신 쓰는 인메모리 조회 테이블
· ClickHouse 공식 문서 Dictionaries
Dictionary가 데이터를 채워 넣을 원천을 지정하는 설정. 로컬 파일, HTTP(S), MySQL/PostgreSQL/ClickHouse 같은 DBMS, Redis/MongoDB 등 다양한 종류를 지원하며, clickhouse-learn-15의 조회 레이아웃(FLAT/HASHED/CACHE)과는 독립적인 개념이다.
Dictionary Source — 어디서 데이터를 가져와 그 조회 테이블을 채우는가
· ClickHouse 공식문서 Dictionary Sources
여러 샤드에 흩어진 로컬 테이블들을 하나의 논리적 테이블처럼 보이게 해주는 가상 테이블. 실제 데이터를 저장하지 않고 쿼리 라우팅과 결과 병합만 담당한다.
Distributed 테이블 엔진과 샤딩
연속된 델타(차이)들 사이의 차이(2차 차분)를 저장하는 인코딩. 일정 간격으로 증가하는 시계열 타임스탬프 압축에 특히 효과적이다.
코덱과 인코딩 — 왜 압축률이 이렇게 높은가
· ClickHouse 공식 블로그 'Optimizing ClickHouse with Schemas and Codecs' 및 Altinity 인코딩 가이드
ClickHouse가 XML 설정으로 등록한 외부 실행 파일/스크립트를 호출해 데이터를 처리하는 사용자 정의 함수. 외부 프로그램은 STDIN으로 인자를 읽고 STDOUT으로 결과를 청크 단위로 출력해야 한다.
SQL UDF와 Executable UDF — 쿼리 안에서 반복 로직을 재사용하는 두 가지 방법
· ClickHouse 공식 문서 CREATE FUNCTION 및 User Defined Functions(UDF)
쿼리의 인덱스/Projection 활용 효과를 확인하는 진단 명령. 전체 그래뉼 중 실제로 스캔이 선택된 그래뉼의 비율을 보여준다.
Projection과 EXPLAIN — 여러 정렬 순서를 한 테이블에
· ClickHouse 공식 문서 data-modeling/projections 및 EXPLAIN 가이드
SELECT 쿼리에 붙여 쿼리 시점에 강제로 병합 로직(중복제거 등)을 적용하는 키워드. 정확한 결과를 즉시 보장하지만 대용량에서는 쿼리가 느려질 수 있다.
MergeTree 변형 — ReplacingMergeTree/AggregatingMergeTree와 FINAL의 함정
ReplacingMergeTree 엔진에 삭제 여부를 나타내는 컬럼을 지정하는 파라미터(23.2+). 23.3부터는 이 컬럼이 지정되면 쿼리 시점에 deleted=1인 행을 자동으로 걸러낸다.
ReplacingMergeTree의 is_deleted 컬럼 — 엔진 차원에서 소프트 삭제를 자동화한다
· ClickHouse 공식문서 Working with the ReplacingMergeTree engine
ClickHouse가 두 테이블을 조인할 때 쓸 물리적 알고리즘(hash/parallel_hash/full_sorting_merge/grace_hash/direct 등)을 지정하는 설정. auto로 두면 가용 자원에 따라 적응적으로 선택된다.
join_algorithm — 메모리와 속도 사이에서 조인 방식을 고르기
· ClickHouse 공식 문서 Joining tables
Kafka 토픽을 직접 구독해 메시지를 읽어오는 ClickHouse 테이블 엔진. 데이터를 영구 저장하지 않아 거의 항상 Materialized View와 짝을 이뤄 MergeTree 테이블로 데이터를 흘려보낸다.
Kafka 테이블 엔진 — 스트림 수집의 표준 아키텍처와 at-least-once의 한계
· ClickHouse 공식 문서 Using the Kafka table engine, Altinity Kafka Engine FAQ
DELETE 요청을 _row_exists 마스크 컬럼만 갱신하는 경량 mutation으로 바꿔 처리하는 ClickHouse의 삭제 방식. 나머지 컬럼은 재작성하지 않고 하드링크로 유지해 일반 mutation보다 훨씬 저렴하지만, 물리적 디스크 제거는 다음 병합 시점까지 지연된다.
Lightweight DELETE — 전체 컬럼을 다시 쓰지 않고 마스크 하나만 바꾼다
· ClickHouse 공식문서 Updating and deleting ClickHouse data, Avoid mutations
distinct 값이 적은 컬럼(주로 문자열)을 딕셔너리 인코딩으로 저장하는 ClickHouse 타입 래퍼. 저장 공간을 크게 줄이고 집계 연산도 가속한다.
코덱과 인코딩 — 왜 압축률이 이렇게 높은가
· ClickHouse 공식 블로그 'Optimizing ClickHouse with Schemas and Codecs' 및 Altinity 인코딩 가이드
원본 테이블에 INSERT가 일어날 때마다 그 새 데이터에 대해 정의된 쿼리를 실행해 결과를 별도 대상 테이블에 저장하는 INSERT 트리거. 조회 시점에 계산되는 일반 RDB 뷰와 근본적으로 다르다.
Materialized View — INSERT 트리거로서의 동작
쿼리 하나가 쓸 수 있는 최대 메모리를 제한하는 설정(기본 10GB). 초과 시 ClickHouse가 예외를 던지고 그 쿼리를 즉시 취소한다.
max_memory_usage — 쿼리 하나가 메모리를 얼마나 쓸 수 있는가
· ClickHouse 공식문서 Memory limit exceeded for query
포트 9000의 ClickHouse 커스텀 이진 프로토콜. HTTP보다 오버헤드가 낮고 처리량이 높으며 server-push를 지원한다. clickhouse-client와 Distributed 테이블 엔진의 서버 간 통신에 쓰인다.
HTTP vs Native 인터페이스 — 같은 서버, 두 개의 서로 다른 문
· ClickHouse 공식문서 Native interface (TCP)
여러 필드로 구성된 레코드 목록을 한 셀에 담는 것처럼 보이게 하는 문법적 설탕(syntactic sugar). 실제로는 각 필드가 독립된 Array 컬럼으로 저장되고, 같은 행 안에서는 모든 필드의 배열 길이가 반드시 같아야 한다.
Array/Map/Nested — 컬럼 지향 저장 안에서 반정형 데이터를 표현하는 법
· ClickHouse 공식 문서 Nested data structures
타입 T의 값에 NULL을 허용하는 ClickHouse 타입. 내부적으로 값 파일과 별도의 NULL 마스크 파일 두 개를 유지하며, 공식 문서는 성능상 이유로 사용을 최소화할 것을 권고한다.
Nullable 타입 — '거의 항상 성능에 해롭다'는 공식 경고의 이유
· ClickHouse 공식 문서 Nullable
CREATE/DROP/ALTER 등의 DDL 쿼리에 붙여, 그 변경을 지정한 클러스터에 속한 모든 노드로 전파해 각자 실행하게 만드는 절. ClickHouse Keeper/ZooKeeper 기반 분산 DDL 큐로 조율된다.
ON CLUSTER — 스키마 변경을 클러스터 전체 노드에 한 번에 전파하기
· ClickHouse 공식 문서 Distributed DDL Queries
샤딩 없이 같은 데이터를 복제해 가진 여러 레플리카에 쿼리 하나를 그래뉼 단위로 쪼개 병렬 실행하는 기능. 코디네이터 레플리카가 어떤 파트를 가진 레플리카에게 어떤 그래뉼을 맡길지 동적으로 배정한다.
Parallel Replicas — 샤딩 없이 쿼리 하나를 여러 레플리카에 쪼개기
· ClickHouse 공식 문서 Parallel replicas
MergeTree 테이블에 INSERT 한 번으로 생성되는 불변 데이터 조각. ORDER BY로 정렬되고 프라이머리 인덱스가 포함된다.
MergeTree 엔진 — Parts와 백그라운드 병합
데이터를 논리적 관리 단위(보통 시간 단위)로 나누는 키. ORDER BY와 달리 정렬/쿼리 가속이 목적이 아니라 TTL 삭제 등 데이터 생명주기 관리와, 병합이 파티션 내부로 국한된다는 점이 핵심이다.
희소 프라이머리 인덱스와 ORDER BY / PARTITION BY 설계
ENGINE = PostgreSQL(...)로 만든 ClickHouse 테이블이 실제 데이터를 갖지 않고 원격 PostgreSQL 테이블에 대한 SELECT/INSERT를 그대로 대리하는 연동 엔진. 단순 WHERE 조건(=, !=, 비교연산자, IN)은 PostgreSQL 쪽으로 pushdown된다.
PostgreSQL/MySQL 테이블 엔진 — 데이터를 옮기지 않고 외부 DB를 그대로 조회한다
· ClickHouse 공식문서 PostgreSQL table Engine
조건 평가에 필요한 컬럼만 먼저 읽어 필터링한 뒤, 매칭되는 블록에 대해서만 나머지 컬럼을 읽는 ClickHouse의 2단계 컬럼 읽기 최적화. MergeTree 계열 테이블에서만 지원된다.
PREWHERE — 넓은 테이블에서 두 단계로 나눠 컬럼을 읽는 최적화
· ClickHouse 공식 문서 PREWHERE clause
테이블 내부에 자동으로 유지되는, 다른 정렬 순서(다른 프라이머리 인덱스)를 가진 물리적 사본. 쿼리 패턴에 따라 원본 또는 Projection이 자동 선택된다.
Projection과 EXPLAIN — 여러 정렬 순서를 한 테이블에
· ClickHouse 공식 문서 data-modeling/projections 및 EXPLAIN 가이드
윈도우 함수가 계산된 이후 그 결과값을 조건으로 행을 필터링하는 절. 쿼리에 최소 1개의 윈도우 함수가 있어야 쓸 수 있으며, 없다면 WHERE를 쓴다.
윈도우 함수와 QUALIFY 절 — 순위 계산 결과를 곧바로 필터링하기
· ClickHouse 공식 문서 QUALIFY clause
INSERT 시점이 아니라 REFRESH EVERY로 지정한 스케줄마다 전체 SELECT 쿼리를 다시 실행해 결과를 원자적으로 교체하는 Materialized View. clickhouse-learn-05의 즉각 반응형(incremental) MV와 정반대 방식이다.
Refreshable Materialized View — INSERT 트리거가 아니라 스케줄로 다시 계산한다
· ClickHouse 공식문서 Refreshable materialized view
권한·설정·제약을 이름 붙여 묶어둔 단위. User Account에 직접 권한을 주는 대신 Role을 만들어 부여하면 직무 단위로 권한을 관리할 수 있다.
RBAC — User/Role/GRANT로 권한을 통제한다
· ClickHouse 공식문서 Access control and account management
CREATE ROW POLICY로 테이블에 필터 표현식을 붙여, 적용 대상 사용자·역할의 모든 쿼리에 서버가 자동으로 WHERE 조건을 덧붙이게 하는 행 수준 보안 기능. clickhouse-learn-33의 RBAC(테이블 단위)보다 세밀한 행 단위 통제다.
ROW POLICY — RBAC를 행 단위로 한 단계 더 세밀하게
· ClickHouse 공식문서 Row-level and column-level security
테이블 생성 시 지정해둔 샘플링 키의 해시값을 기준으로 데이터의 일부만 결정론적으로 골라 읽는 절. 전체 스캔보다 빠르지만 근사치를 반환한다.
SAMPLE 절 — 정확도를 조금 포기하고 응답 속도를 얻는 결정론적 샘플링
· ClickHouse 공식 문서 SAMPLE clause
CREATE FUNCTION으로 정의하는, 파라미터·연산자·다른 함수 호출을 조합한 람다식 기반 사용자 정의 함수. ClickHouse 쿼리 엔진 안에서 인라인으로 실행된다.
SQL UDF와 Executable UDF — 쿼리 안에서 반복 로직을 재사용하는 두 가지 방법
· ClickHouse 공식 문서 CREATE FUNCTION 및 User Defined Functions(UDF)
여러 disk를 volume으로 묶고, 그 volume들을 계층적으로 조합한 설정. TTL과 결합해 데이터가 오래될수록 더 저렴한 저장 계층으로 자동 이동하게 만든다.
storage_policy — 디스크를 계층화해 hot/cold 데이터를 자동으로 옮기기
· ClickHouse 공식 문서 Automatic data tiering with TTL
실행 중이거나 완료된 ALTER TABLE UPDATE/DELETE(mutation)의 진행 상황을 보여주는 시스템 테이블. is_done(완료 여부)과 실패 시 latest_fail_reason 등의 진단 필드를 제공한다.
system.mutations — 백그라운드 mutation이 지금 어디까지 왔는지 본다
· ClickHouse 공식문서 system.mutations
실행된 쿼리들의 실측 이력을 기록하는 ClickHouse 시스템 테이블. 성공한 쿼리마다 QueryStart/QueryFinish 두 행이 남고, query_duration_ms로 실제 소요 시간을 확인할 수 있다. EXPLAIN(사전 계획 확인)과 달리 사후 진단용이다.
system.query_log — 쿼리가 끝난 뒤 무슨 일이 있었는지 되짚어보기
· ClickHouse 공식문서 system.query_log
지정한 기간이 지나면 컬럼 값을 초기화하거나(컬럼 단위) 행을 삭제·이동시키는(테이블 단위) ClickHouse의 자동 데이터 생명주기 관리 기능.
TTL — 컬럼/테이블 단위 자동 만료와 계층 이동
· ClickHouse 공식 문서 Manage data with TTL
만료된 행들을 삭제하는 대신 지정한 컬럼 기준으로 그룹화해 집계 함수로 요약 행 하나로 압축하는 TTL 문법. GROUP BY 컬럼은 반드시 PRIMARY KEY의 접두사여야 한다.
TTL ... GROUP BY — 삭제 대신 요약 행으로 다운샘플링
· ClickHouse 공식 문서 Using TTL to manage data lifecycle
ORDER BY 절에 붙여, 정렬 기준 컬럼의 값이 빠진 구간을 STEP 간격의 합성 행으로 채워 넣는 수정자. 다른 컬럼은 기본값으로 채워지며, INTERPOLATE로 기본값 대신 계산식을 적용할 수도 있다.
ORDER BY WITH FILL — 데이터가 없는 시점도 빈틈없이 채워 반환하기
· ClickHouse 공식 문서 ORDER BY clause — WITH FILL modifier
GROUP BY 키 목록의 순서를 기준으로 오른쪽부터 계층적으로 접어가는 소계를 계산하는 수정자. N개 키가 있으면 N+1단계(가장 상세~전체총계)의 결과가 함께 나온다.
WITH ROLLUP/CUBE/TOTALS — 소계·총계를 GROUP BY 하나로 한꺼번에
· ClickHouse 공식 문서 GROUP BY clause — ROLLUP/CUBE/TOTALS modifiers
중간 소계 없이 전체 행에 대한 집계 결과 딱 한 줄만 추가로 계산하는 GROUP BY 수정자. 키 컬럼은 기본값으로 표시되며, XML/JSON은 별도 필드로, 다른 포맷은 결과 뒤에 붙는 행으로 표현된다.
WITH ROLLUP/CUBE/TOTALS — 소계·총계를 GROUP BY 하나로 한꺼번에
· ClickHouse 공식 문서 GROUP BY clause — ROLLUP/CUBE/TOTALS modifiers
MergeTree 파트 내부에서 프라이머리 인덱스가 가리키는 최소 단위(기본 8192행). 희소 인덱스는 그래뉼 단위로만 인덱싱한다.
희소 프라이머리 인덱스와 ORDER BY / PARTITION BY 설계
ClickHouse Part가 지금까지 몇 번 병합을 거쳤는지 나타내는 값. 0이면 아직 병합 안 된 신규 Part, 병합될 때마다 1씩 증가한다.
병합 선택 알고리즘 — 어떤 Part를 먼저 합칠지 결정하는 기준
· ClickHouse 공식문서 Part merges