테이블 엔진(테이블의 유형)은 다음을 결정합니다:
- 데이터가 저장되는 방식과 위치, 데이터를 기록할 위치, 그리고 데이터를 읽어올 위치
- 어떤 쿼리를 지원하는지와 그 처리 방식
- 동시 데이터 액세스
- 인덱스가 있는 경우 그 사용 방식
- 요청을 멀티스레드로 실행할 수 있는지 여부
- 데이터 복제 매개변수
엔진 계열
MergeTree
고부하 작업에 가장 범용적이고 기능이 풍부한 테이블 엔진입니다. 이 엔진들의 공통적인 특징은 데이터를 빠르게 삽입한 뒤 백그라운드에서 후속 처리를 수행한다는 점입니다. MergeTree 계열 엔진은 데이터 복제(Replicated* 버전의 엔진 사용), 파티셔닝, 보조 데이터 스키핑 인덱스, 그리고 다른 엔진에서는 지원되지 않는 기타 기능을 지원합니다.
이 계열의 엔진:
Log
최소한의 기능만 제공하는 경량 엔진입니다. 많은 수의 작은 테이블(약 100만 행 이하)을 빠르게 생성하고, 나중에 이를 통째로 읽어야 할 때 가장 효과적입니다.
이 계열에 포함된 엔진:
통합 엔진
다른 데이터 저장 및 처리 시스템과 연동하기 위한 엔진입니다.
이 계열의 엔진:
특수 엔진
이 계열에 속한 엔진:
| 특수 엔진 |
|---|
| 특수 테이블 엔진 |
| Alias |
| 분산 |
| 딕셔너리 |
| 머지 |
| 실행형 |
| File |
| Null |
| Set |
| Join |
| URL |
| View |
| 메모리 |
| Buffer |
| 외부 데이터 |
| GenerateRandom |
| KeeperMap |
| FileLog |
가상 컬럼
가상 컬럼은 엔진 소스 코드에 정의되는 테이블 엔진의 고유 속성입니다.
가상 컬럼은 CREATE TABLE 쿼리에서 지정할 수 없으며, SHOW CREATE TABLE 및 DESCRIBE TABLE 쿼리 결과에도 표시되지 않습니다. 또한 가상 컬럼은 읽기 전용이므로 데이터를 삽입할 수도 없습니다.
가상 컬럼의 데이터를 선택하려면 SELECT 쿼리에서 해당 이름을 명시해야 합니다. SELECT *는 가상 컬럼의 값을 반환하지 않습니다.
테이블의 가상 컬럼 중 하나와 같은 이름의 컬럼을 사용해 테이블을 생성하면 해당 가상 컬럼에 접근할 수 없게 됩니다. 이는 권장되지 않습니다. 충돌을 방지하기 위해 가상 컬럼 이름에는 일반적으로 밑줄 접두사가 붙습니다.
-
_table— 데이터를 읽어온 테이블의 이름을 포함합니다. 유형: String.사용 중인 테이블 엔진과 관계없이 모든 테이블에는
_table이라는 공통 가상 컬럼이 포함됩니다.머지 테이블 엔진으로 테이블을 쿼리할 때는
WHERE/PREWHERE절에서_table에 대한 상수 조건을 설정할 수 있습니다(예:WHERE _table='xyz'). 이 경우_table조건을 만족하는 테이블에 대해서만 읽기 작업이 수행되므로_table컬럼은 인덱스 역할을 합니다.SELECT ... FROM (... UNION ALL ...)형식의 쿼리를 사용할 때는_table컬럼을 지정하여 반환된 행이 실제로 어느 테이블에서 왔는지 확인할 수 있습니다.