메인 콘텐츠로 건너뛰기
Merge 엔진(MergeTree와 혼동하지 마십시오)은 자체적으로 데이터를 저장하지는 않지만, 여러 다른 테이블에서 동시에 읽을 수 있게 해줍니다. 읽기는 자동으로 병렬 처리됩니다. 테이블에 쓰기는 지원되지 않습니다. 읽을 때는 실제로 읽는 테이블에 인덱스가 있으면 해당 인덱스가 사용됩니다.

테이블 생성하기

CREATE TABLE ... Engine=Merge(db_name, tables_regexp)

엔진 매개변수

db_name

db_name — 가능한 값:
  • 데이터베이스 이름,
    • 데이터베이스 이름 문자열을 반환하는 상수 표현식, 예를 들어 currentDatabase(),
    • REGEXP(expression), 여기서 expression은 DB 이름과 일치하는 정규식입니다.

tables_regexp

tables_regexp — 지정된 DB 또는 여러 DB의 테이블 이름과 일치하는 정규식입니다. 정규식 — re2 (PCRE의 부분 집합 지원), 대소문자를 구분합니다. 정규식에서 기호를 이스케이프하는 방법에 대한 참고 사항은 “match” 섹션을 참조하십시오.

사용법

읽을 테이블을 선택할 때 Merge 테이블 자체는 regex와 일치하더라도 선택되지 않습니다. 이는 루프를 방지하기 위해서입니다. 서로의 데이터를 끝없이 읽으려 하는 두 개의 Merge 테이블을 만들 수도 있지만, 좋은 방법은 아닙니다. Merge 엔진을 사용하는 일반적인 방식은 많은 수의 TinyLog 테이블을 하나의 테이블처럼 다루는 것입니다.

예시

예시 1 ABC_corporate_siteABC_store라는 두 개의 데이터베이스를 가정해 보겠습니다. all_visitors 테이블에는 두 데이터베이스의 visitors 테이블에 있는 ID가 포함됩니다.
CREATE TABLE all_visitors (id UInt32) ENGINE=Merge(REGEXP('ABC_*'), 'visitors');
예시 2 기존 테이블 WatchLog_old가 있고, 데이터를 새 테이블 WatchLog_new로 옮기지 않고 파티셔닝을 변경하기로 했으며, 두 테이블의 데이터를 모두 확인해야 한다고 가정해 보겠습니다.
CREATE TABLE WatchLog_old(
    date Date,
    UserId Int64,
    EventType String,
    Cnt UInt64
)
ENGINE=MergeTree
ORDER BY (date, UserId, EventType);

INSERT INTO WatchLog_old VALUES ('2018-01-01', 1, 'hit', 3);

CREATE TABLE WatchLog_new(
    date Date,
    UserId Int64,
    EventType String,
    Cnt UInt64
)
ENGINE=MergeTree
PARTITION BY date
ORDER BY (UserId, EventType)
SETTINGS index_granularity=8192;

INSERT INTO WatchLog_new VALUES ('2018-01-02', 2, 'hit', 3);

CREATE TABLE WatchLog AS WatchLog_old ENGINE=Merge(currentDatabase(), '^WatchLog');

SELECT * FROM WatchLog;
┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐
│ 2018-01-01 │      1 │ hit       │   3 │
└────────────┴────────┴───────────┴─────┘
┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐
│ 2018-01-02 │      2 │ hit       │   3 │
└────────────┴────────┴───────────┴─────┘

가상 컬럼

  • _table — 데이터를 읽어온 테이블의 이름입니다. 유형: String. _table로 필터링하면(예: WHERE _table='xyz') 필터 조건을 만족하는 테이블만 읽어옵니다.
  • _database — 데이터를 읽어온 데이터베이스의 이름이 들어 있습니다. 유형: String.
관련 항목
마지막 수정일 2026년 6월 10일