테이블 엔진

테이블 엔진 (Table Engines)

테이블 엔진(테이블 유형)은 데이터가 어디에·어떻게 저장되고, 어떤 쿼리가 어떻게 지원되며, 동시 데이터 접근, 인덱스 사용, 멀티스레드 요청 실행 가능 여부, 데이터 복제 매개변수를 결정해요.

출처: 문서

본문

테이블 엔진(테이블 유형)은 다음을 결정해요.

  • 데이터를 어떻게·어디에 저장하고, 어디에 쓰고, 어디에서 읽을지.
  • 어떤 쿼리가 지원되고 어떻게 지원되는지.
  • 동시 데이터 접근.
  • 인덱스가 있다면 그 사용.
  • 멀티스레드 요청 실행이 가능한지.
  • 데이터 복제 매개변수.

엔진 계열 (Engine families)

MergeTree

고부하 작업을 위한 가장 보편적이고 기능적인 테이블 엔진들이에요. 이 엔진들이 공유하는 속성은 빠른 데이터 삽입과 그에 따른 백그라운드 데이터 처리예요. MergeTree 계열 엔진은 데이터 복제(Replicated* 엔진 버전), 파티셔닝, 보조 데이터 스킵 인덱스, 그리고 다른 엔진에서 지원하지 않는 다른 기능들을 지원해요.

계열의 엔진들:

MergeTree 엔진
MergeTree 계열 개요
MergeTree
ReplacingMergeTree
SummingMergeTree
AggregatingMergeTree
CollapsingMergeTree
VersionedCollapsingMergeTree
GraphiteMergeTree
CoalescingMergeTree
정확 및 근사 벡터 검색
사용자 정의 파티셔닝 키
Replicated* 테이블 엔진
텍스트 인덱스로 전체 텍스트 검색

Log

최소 기능을 가진 가벼운 엔진들이에요. 많은 작은 테이블(약 1백만 행까지)을 빠르게 쓰고 나중에 전체로 읽어야 할 때 가장 효과적이에요.

계열의 엔진들:

Log 엔진
Log 엔진 계열
TinyLog
StripeLog
Log

통합(Integration) 엔진

다른 데이터 저장·처리 시스템과 통신하기 위한 엔진들이에요.

계열의 엔진들:

통합 엔진
통합용 테이블 엔진
ODBC
JDBC
MySQL
MongoDB
Redis
HDFS
S3
Kafka
EmbeddedRocksDB
RabbitMQ
PostgreSQL
S3Queue
TimeSeries
ArrowFlight
AzureQueue
AzureBlobStorage
DeltaLake
ExternalDistributed
Hive
Hudi
Iceberg
MaterializedPostgreSQL
NATS
Paimon
SQLite
YTsaurus

특수(Special) 엔진

계열의 엔진들:

특수 엔진
특수 테이블 엔진
Alias
Distributed
Dictionary
Merge
Executable
File
Null
Set
Join
URL
View
Memory
Buffer
외부 데이터(External Data)
GenerateRandom
KeeperMap
FileLog

가상 컬럼 (Virtual columns)

가상 컬럼은 엔진 소스 코드에 정의된 테이블 엔진의 필수 속성이에요. CREATE TABLE 쿼리에 가상 컬럼을 지정해서는 안 되고, SHOW CREATE TABLEDESCRIBE TABLE 쿼리 결과에서 볼 수 없어요. 가상 컬럼은 또한 읽기 전용이라 가상 컬럼에 데이터를 넣을 수 없어요. 가상 컬럼에서 데이터를 선택하려면 SELECT 쿼리에 그 이름을 지정해야 해요. SELECT *는 가상 컬럼의 값을 반환하지 않아요. 테이블의 가상 컬럼 중 하나와 같은 이름의 컬럼으로 테이블을 만들면 가상 컬럼에 접근할 수 없게 돼요. 이렇게 하는 것은 권장하지 않아요. 충돌을 피하는 데 도움이 되도록 가상 컬럼 이름은 보통 밑줄로 접두사가 붙어요.

  • _table — 데이터를 읽은 테이블의 이름을 담아요. 타입: String. 사용되는 테이블 엔진과 무관하게 각 테이블은 _table이라는 보편적 가상 컬럼을 포함해요. merge 테이블 엔진으로 테이블을 조회할 때 WHERE/PREWHERE 절에 _table에 대한 상수 조건을 설정할 수 있어요(예: WHERE _table='xyz'). 이 경우 _table 조건이 만족되는 테이블에 대해서만 읽기 연산이 수행되므로 _table 컬럼이 인덱스처럼 동작해요. SELECT ... FROM (... UNION ALL ...) 형식의 쿼리를 사용할 때 _table 컬럼을 지정해 반환된 행이 실제로 어떤 테이블에서 왔는지 결정할 수 있어요.

더 알아보기 (Learn more)