表引擎
表引擎(表的类型)决定了
- 数据如何以及存储在哪里,写入到哪里,以及从哪里读取数据。
- 支持哪些查询,以及如何支持。
- 并发数据访问。
- 如果存在索引,如何使用索引。
- 是否可以进行多线程请求执行。
- 数据复制参数。
引擎族
MergeTree
最通用和功能强大的表引擎,适用于高负载任务。这些引擎共有的特性是快速数据插入,随后进行后台数据处理。MergeTree 家族的引擎支持数据复制(使用 Replicated* 版本的引擎)、分区、二级数据跳跃索引以及其他引擎不支持的功能。
该家族中的引擎
| MergeTree 引擎 |
|---|
| MergeTree |
| ReplacingMergeTree |
| SummingMergeTree |
| AggregatingMergeTree |
| CollapsingMergeTree |
| VersionedCollapsingMergeTree |
| GraphiteMergeTree |
| CoalescingMergeTree |
Log
轻量级 引擎,功能最少。当您需要快速写入许多小表(最多约 100 万行)并在以后将其作为整体读取时,它们是最有效的。
该家族中的引擎
| Log 引擎 |
|---|
| TinyLog |
| StripeLog |
| Log |
集成引擎
用于与其它数据存储和处理系统通信的引擎。
该家族中的引擎
| 集成引擎 |
|---|
| ODBC |
| JDBC |
| MySQL |
| MongoDB |
| Redis |
| HDFS |
| S3 |
| Kafka |
| EmbeddedRocksDB |
| RabbitMQ |
| PostgreSQL |
| S3Queue |
| TimeSeries |
特殊引擎
该家族中的引擎
| 特殊引擎 |
|---|
| 分布式 |
| 字典 |
| 合并 |
| 可执行 |
| 文件 |
| Null |
| 集合 |
| 连接 |
| URL |
| 视图 |
| 内存 |
| 缓冲区 |
| 外部数据 |
| 生成随机数 |
| KeeperMap |
| FileLog |
虚拟列
虚拟列是引擎源代码中定义的表引擎的固有属性。
您不应在 CREATE TABLE 查询中指定虚拟列,并且无法在 SHOW CREATE TABLE 和 DESCRIBE TABLE 查询结果中看到它们。虚拟列也是只读的,因此您无法将数据插入到虚拟列中。
要从虚拟列中选择数据,您必须在 SELECT 查询中指定其名称。SELECT * 不会返回虚拟列中的值。
如果您创建一个列,其名称与表虚拟列之一相同,则虚拟列将无法访问。我们不建议这样做。为了帮助避免冲突,虚拟列名通常以下划线为前缀。
-
_table— 包含读取数据的表的名称。类型:字符串。无论使用哪个表引擎,每个表都包含一个名为
_table的通用虚拟列。在使用合并表引擎的表进行查询时,可以在
WHERE/PREWHERE子句中为_table设置常量条件(例如,WHERE _table='xyz')。在这种情况下,读取操作仅对满足_table条件的表执行,因此_table列充当索引。当使用类似于
SELECT ... FROM (... UNION ALL ...)的格式的查询时,我们可以通过指定_table列来确定返回的行来自哪个实际表。