← 학습 카테고리

Learn

ClickHouse

47개 모듈 · 현재 37번째

ClickHouse 모듈 37/47 clickhouse-learn-37

PostgreSQL/MySQL 테이블 엔진 — 데이터를 옮기지 않고 외부 DB를 그대로 조회한다

ClickHouse ROW POLICY 및 PostgreSQL/MySQL 테이블 엔진 공식 문서 종합 (웹 리서치, 2026) — ClickHouse 공식 문서(knowledgebase/row-column-policy, engines/table-engines/integrations/postgresql, mysql) ClickHouse 공식문서 PostgreSQL table Engine

이 모듈을 다 읽으면

  • PostgreSQL/MySQL 테이블 엔진이 clickhouse-learn-14의 Kafka 엔진과 같은 '외부 연동' 계열임을 설명할 수 있다
  • Predicate Pushdown이 조회 성능에 어떤 영향을 주는지 설명할 수 있다

clickhouse-learn-14에서 다룬 Kafka 테이블 엔진(외부 스트림을 구독하는 창구)과 같은 계열로, 이번엔 외부 관계형 DB(PostgreSQL/MySQL)를 데이터 이동 없이 그대로 조회·쓰기하는 연동 엔진을 정리한다.

테이블 엔진 — 원격 DB로 읽기·쓰기를 그대로 대리한다

PostgreSQL 테이블 엔진으로 테이블을 만들면, 그 ClickHouse 테이블은 실제 데이터를 갖고 있지 않고 원격 PostgreSQL 서버의 테이블에 대한 SELECT/INSERT를 그대로 대리(proxy)한다 — clickhouse-learn-14의 Kafka 엔진이 '데이터를 저장하지 않고 구독 창구 역할만' 했던 것과 같은 원칙이 여기서도 적용된다. MySQL 엔진도 같은 패턴을 따른다. 지원 버전은 PostgreSQL 12 이상이다.

핵심 포인트

  • PostgreSQL/MySQL 테이블 엔진으로 만든 테이블은 데이터를 직접 안 갖고, 원격 DB의 SELECT/INSERT를 그대로 대리 — clickhouse-learn-14 Kafka 엔진의 '데이터 미보유, 창구 역할'과 같은 원칙
  • PostgreSQL 테이블 엔진은 PostgreSQL 12 이상 지원

Predicate Pushdown — 단순 WHERE 조건은 원격 DB에서 먼저 걸러진다

ClickHouse는 =, !=, >, >=, <, <=, IN 같은 단순한 WHERE 조건을 PostgreSQL 쪽으로 밀어넣어(pushdown) 실행하고, 그 결과만 스트리밍으로 받아온다 — 즉 조건에 안 맞는 행들을 ClickHouse까지 굳이 다 끌고 온 다음에 걸러내는 게 아니라, 원격 DB가 미리 걸러준 결과만 받는다. 이는 두 시스템 간 네트워크 전송량을 크게 줄여준다는 점에서 효율적이지만, 복잡한 조건(예: 함수 호출이 섞인 조건)은 pushdown 대상이 아니라 ClickHouse 쪽에서 후처리된다는 한계도 있다.

핵심 포인트

  • 단순 WHERE 조건(=, !=, 비교연산자, IN)은 PostgreSQL 쪽으로 pushdown돼 원격에서 먼저 필터링 — 네트워크 전송량 절감
  • 복잡한 조건(함수 호출 등)은 pushdown 안 되고 ClickHouse 쪽에서 후처리

테이블 단위 vs 데이터베이스 단위 — 통째로 매핑하는 방법도 있다

테이블 엔진은 원격의 특정 테이블 하나를 ClickHouse 테이블 하나에 매핑하는 방식이다. 이보다 더 넓은 범위가 필요하면 데이터베이스 엔진(PostgreSQL 데이터베이스 엔진 등)을 쓸 수 있는데, 이는 원격 PostgreSQL의 여러 테이블을 통째로 가상 데이터베이스로 매핑해, 그 안의 테이블들에 대한 쿼리를 실시간으로 원격에 전달한다 — 테이블 하나씩 개별로 엔진을 정의할 필요 없이 스키마 전체를 연동하고 싶을 때 쓴다.

핵심 포인트

  • 테이블 엔진: 원격의 테이블 하나를 ClickHouse 테이블 하나에 매핑
  • 데이터베이스 엔진: 원격 DB의 여러 테이블을 통째로 가상 데이터베이스로 매핑 — 스키마 전체 연동이 필요할 때 사용