- 数据如何存储、存储在何处、写入到哪里以及从哪里读取。
- 支持哪些查询,以及支持方式。
- 数据的并发访问。
- 是否使用索引 (如果存在) 。
- 是否支持多线程请求执行。
- 数据复制参数。
引擎系列
MergeTree
MergeTree 家族引擎支持数据复制 (通过引擎的 Replicated* 版本) 、分区、二级数据跳过索引,以及其他引擎不支持的功能。
该家族中的引擎:
Log
集成引擎
特殊引擎
虚拟列
CREATE TABLE 查询中指定虚拟列,并且在 SHOW CREATE TABLE 和 DESCRIBE TABLE 查询结果中也看不到它们。虚拟列也是只读的,因此你不能向虚拟列插入数据。
要从虚拟列中选择数据,你必须在 SELECT 查询中显式指定其名称。SELECT * 不会返回虚拟列中的值。
如果你创建的表中某一列与该表的某个虚拟列同名,则该虚拟列将无法访问。我们不建议这样做。为帮助避免冲突,虚拟列名通常以下划线作为前缀。
-
_table— 包含读取数据的表名。Type: String. 无论使用哪种表引擎,每个表都包含一个名为_table的通用虚拟列。 使用 Merge 表引擎查询表时,你可以在WHERE/PREWHERE子句中为_table设置常量条件 (例如WHERE _table='xyz') 。在这种情况下,只会读取满足_table条件的那些表,因此_table列可充当索引。 当使用SELECT ... FROM (... UNION ALL ...)这种格式的查询时,我们可以通过指定_table列来确定返回的行实际来自哪个表。