跳至主要内容
跳至主要内容

表引擎

表引擎(表的类型)决定了

  • 数据如何以及存储在哪里,写入到哪里,以及从哪里读取数据。
  • 支持哪些查询,以及如何支持。
  • 并发数据访问。
  • 如果存在索引,如何使用索引。
  • 是否可以进行多线程请求执行。
  • 数据复制参数。

引擎族

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 TABLEDESCRIBE TABLE 查询结果中看到它们。虚拟列也是只读的,因此您无法将数据插入到虚拟列中。

要从虚拟列中选择数据,您必须在 SELECT 查询中指定其名称。SELECT * 不会返回虚拟列中的值。

如果您创建一个列,其名称与表虚拟列之一相同,则虚拟列将无法访问。我们不建议这样做。为了帮助避免冲突,虚拟列名通常以下划线为前缀。

  • _table — 包含读取数据的表的名称。类型:字符串

    无论使用哪个表引擎,每个表都包含一个名为 _table 的通用虚拟列。

    在使用合并表引擎的表进行查询时,可以在 WHERE/PREWHERE 子句中为 _table 设置常量条件(例如,WHERE _table='xyz')。在这种情况下,读取操作仅对满足 _table 条件的表执行,因此 _table 列充当索引。

    当使用类似于 SELECT ... FROM (... UNION ALL ...) 的格式的查询时,我们可以通过指定 _table 列来确定返回的行来自哪个实际表。

    © . This site is unofficial and not affiliated with ClickHouse, Inc.