表引擎
表引擎(表的类型)决定了:
- 数据的存储方式和位置,写入和读取的位置。
- 支持哪些查询,以及如何支持。
- 并发数据访问。
- 索引的使用(如果存在)。
- 是否可以进行多线程请求执行。
- 数据复制参数。
引擎家族
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 |
特殊引擎
该家族中的引擎:
| 特殊引擎 |
|---|
| 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 * 不会返回虚拟列的值。
如果您创建的表带有与某个虚拟列同名的列,则该虚拟列将变得不可访问。我们不推荐这样做。为了帮助避免冲突,虚拟列的名称通常以下划线作为前缀。
-
_table— 包含读取数据的表的名称。类型:String。无论使用什么表引擎,每个表都包含一个名为
_table的通用虚拟列。当查询一个使用 merge 表引擎的表时,您可以在
WHERE/PREWHERE子句中对_table设置常量条件(例如,WHERE _table='xyz')。在这种情况下,仅对满足_table条件的表执行读取操作,因此_table列充当索引。当使用格式为
SELECT ... FROM (... UNION ALL ...)的查询时,我们可以通过指定_table列来确定返回行的实际表来源。