表引擎决定什么
ClickHouse 的表引擎决定数据怎么存、怎么读、能不能合并:生产数据以 MergeTree 家族为主,它们带主键排序、分区与后台合并;集成引擎(Kafka、MySQL、S3 等)把外部数据源映射成表;Distributed 负责集群层面的读写转发;Log 家族结构简单、没有索引,只适合小表与临时数据。
基本信息
| MergeTree 家族 | Replacing / Summing / Aggregating / Collapsing / Replicated 等,带排序键与后台合并 |
|---|---|
| Log 家族 | TinyLog / Log / StripeLog,无索引,适合小数据量 |
| 集成引擎 | Kafka / MySQL / PostgreSQL / JDBC / S3 / URL 等,对接外部数据源 |
| 特殊引擎 | Distributed、Dictionary、Merge、Buffer、Null、Memory、File |
| 查看方式 | SELECT name, description FROM system.table_engines |
典型使用场景
- 选型时先确认是否需要主键排序、分区与合并去重
- 外部数据同步:Kafka 引擎表加物化视图,把数据落到 MergeTree
- 集群查询入口:用 Distributed 表把查询分发到各分片
- 临时数据与小字典表:Memory、Log 家族建表快、开销低
- 一次性分析外部文件:File、URL 引擎直接把文件当表查
常用操作
常用操作
-- 列出实例支持的全部引擎与说明
SELECT name, description FROM system.table_engines ORDER BY name;
-- 生产日志表:MergeTree 家族,带分区与排序键
CREATE TABLE events
(
ts DateTime,
user_id UInt64,
action LowCardinality(String)
)
ENGINE = MergeTree
PARTITION BY toYYYYMMDD(ts)
ORDER BY (ts, user_id);
-- 临时小表:Log 家族,无索引、写入轻
CREATE TABLE tmp_log (ts DateTime, msg String) ENGINE = Log;
-- 查看某张表实际使用的引擎与建表语句
SHOW CREATE TABLE events;引擎族与适用边界
| 引擎族 | 特点 | 适用 / 不建议 |
|---|---|---|
| MergeTree | 有排序键、分区与后台合并 | 绝大多数生产表;不适合单行高频更新 |
| Log 家族 | 无索引、结构简单 | 小表与临时数据;大表不要用 |
| Distributed | 只做转发,不存数据 | 集群查询入口;单机部署不需要 |
| Memory | 数据驻留内存,重启即失 | 临时中间结果;不能存业务数据 |
| 集成引擎 | 把外部数据源映射成表 | 做同步与查询;多数不宜当业务主表 |
Memory 引擎数据不落盘、重启即丢,只适合临时表;File、URL 引擎把外部文件或 HTTP 响应当表查询,适合一次性分析,不宜纳入常规数据链路。