Merge 테이블 엔진
Merge 엔진은 (MergeTree와 혼동하지 말아야 하며) 자체적으로 데이터를 저장하지 않고,任任任任任任任任任任任任任任任任任任任任任任任任여러 개의 다른 테이블에서 동시에 데이터를 읽을 수 있도록 합니다.
읽기 작업은 자동으로 병렬 처리됩니다. 테이블로의 쓰기 작업은 지원되지 않습니다. 읽기 시에는, 존재하는 경우 실제로 읽는 테이블의 인덱스가 사용됩니다.
테이블 생성
엔진 파라미터
db_name
db_name — 가능한 값:
- 데이터베이스 이름,
- 예를 들어
currentDatabase()와 같이 데이터베이스 이름 문자열을 반환하는 상수 표현식, REGEXP(expression), 여기서expression은 DB 이름과 일치시키기 위한 정규식입니다.
tables_regexp
tables_regexp — 지정된 하나 이상의 DB에서 테이블 이름과 일치시키기 위한 정규식입니다.
정규식 — re2 (PCRE의 부분 집합을 지원), 대소문자를 구분합니다. 정규식에서 이스케이프 기호에 대한 내용은 「match」 섹션을 참조하십시오.
사용법
읽을 테이블을 선택할 때 정규식에 일치하더라도 Merge 테이블 자체는 선택되지 않습니다. 이는 루프가 발생하는 것을 방지하기 위한 것입니다.
서로의 데이터를 끝없이 읽으려고 시도하는 두 개의 Merge 테이블을 만드는 것도 가능하지만, 이는 권장되는 방법이 아닙니다.
Merge 엔진의 일반적인 사용 방식은 다수의 TinyLog 테이블을 마치 하나의 테이블처럼 다루는 것입니다.
예시
예시 1
두 데이터베이스 ABC_corporate_site와 ABC_store가 있다고 가정합니다. all_visitors 테이블에는 두 데이터베이스의 visitors 테이블에 있는 ID 값이 모두 포함됩니다.
예시 2
기존 테이블 WatchLog_old가 있고, 데이터를 새 테이블 WatchLog_new로 옮기지 않은 상태에서 파티셔닝을 변경하기로 했다고 가정합니다. 이때 두 테이블의 데이터를 모두 조회해야 합니다.
가상 컬럼
-
_table— 데이터를 읽은 테이블의 이름입니다. 형식: String._table에 대해 필터링하는 경우(예:WHERE _table='xyz') 필터 조건을 만족하는 테이블만에서 데이터가 읽힙니다. -
_database— 데이터를 읽은 데이터베이스의 이름을 포함합니다. 형식: String.
관련 문서