表引擎
表引擎(表的类型)决定了:
- 数据如何存储,写入到哪里,以及从哪里读取。
- 支持哪些查询,以及如何支持。
- 并发数据访问。
- 索引的使用(如果存在的话)。
- 是否可以多线程请求执行。
- 数据复制参数。
引擎家族
MergeTree
针对高负载任务最通用和功能强大的表引擎。这些引擎的共同特征是快速的数据插入,以及随后的后台数据处理。 MergeTree
家族的引擎支持数据复制(带有 Replicated* 版本的引擎)、分区、二级数据跳过索引以及其他在其他引擎中不支持的功能。
家族中的引擎:
MergeTree 引擎 |
---|
MergeTree |
ReplacingMergeTree |
SummingMergeTree |
AggregatingMergeTree |
CollapsingMergeTree |
VersionedCollapsingMergeTree |
GraphiteMergeTree |
Log
具有最小功能的轻量级 引擎。当您需要快速写入许多小表(最多约 100 万行)并随后整体读取时,它们是最有效的。
家族中的引擎:
Log 引擎 |
---|
TinyLog |
StripeLog |
Log |
集成引擎
用于与其他数据存储和处理系统进行通信的引擎。
家族中的引擎:
集成引擎 |
---|
ODBC |
JDBC |
MySQL |
MongoDB |
Redis |
HDFS |
S3 |
Kafka |
EmbeddedRocksDB |
RabbitMQ |
PostgreSQL |
S3Queue |
TimeSeries |
特殊引擎
家族中的引擎:
特殊引擎 |
---|
Distributed |
Dictionary |
Merge |
Executable |
File |
Null |
Set |
Join |
URL |
View |
Memory |
Buffer |
External Data |
GenerateRandom |
KeeperMap |
FileLog |
虚拟列
虚拟列是表引擎的一个积分属性,在引擎源代码中定义。
您不应在 CREATE TABLE
查询中指定虚拟列,并且您在 SHOW CREATE TABLE
和 DESCRIBE TABLE
查询结果中无法看到它们。虚拟列也是只读的,因此您无法向虚拟列插入数据。
要从虚拟列选择数据,您必须在 SELECT
查询中指定其名称。 SELECT *
不会返回虚拟列的值。
如果您创建一个具有与表虚拟列同名的列的表,则该虚拟列将变得不可访问。我们不建议这样做。为避免冲突,虚拟列名称通常以下划线作为前缀。