Clickhouse-基本操作之引擎与表的创建

简介: 表引擎资料参考:https://clickhouse.com/docs/zh/engines/table-engines/

合并树引擎:MergeTree

一、引擎特点

(1)存储的数据按主键排序。

(2)如果指定了分区键的话,可以使用分区。

在相同数据集和相同结果集的情况下ClickHouse中某些带分区的操作会比普通操作更快。查询中指定了分区键时ClickHouse会自动截取分区数据。这也有效增加了查询性能。

(3)支持数据副本。ReplicatedMergeTree系列的表提供了数据副本功能。

(4)支持数据采样。

(5)Clickhouse对大小写敏感。

二、建表示例

CREATE TABLE db1.table1(

`c1` String comment 'c1',

`c2` Nullable(String) comment 'c2',

`c3` Int32 comment 'c3',

`c4` Decimal(10,2) comment 'c4'

)

ENGINE = MergeTree()

PARTITION BY c1  

ORDER by (c1,c3)

SETTINGS index_granularity = 8192;

三、子句说明

ENGINE - 引擎名和参数。

ORDER BY — 排序键。可以是一组列的元组。

PARTITION BY — 分区键 ,可选项。要按月分区,可以使用表达式 toYYYYMM(date_column) ,这里的 date_column 是一个 Date 类型的列。

PRIMARY KEY - 如果要 选择与排序键不同的主键,在这里指定,可选项。默认情况下主键跟排序键(由 ORDER BY 子句指定)相同。

TTL - 指定行存储的持续时间并定义数据片段在硬盘和卷上的移动逻辑的规则列表,可选项。

副本引擎:ReplicatedMergeTree

一、引擎特点  

在每个副本服务器上运行 CREATE TABLE 查询。将创建新的复制表,或给现有表添加新副本。

如果其他副本上已包含了某些数据,在表上添加新副本,则在运行语句后,数据会从其他副本复制到新副本。换句话说,新副本会与其他副本同步。

要删除副本,使用 DROP TABLE。但它只删除那个 – 位于运行该语句的服务器上的副本。

二、创建示例

CREATE TABLE cq_report_db.table2(

`c1` String comment 'c1',

`c2` Nullable(String) comment 'c2',

`c3` Int32 comment 'c3',

`c4` Decimal(10,2) comment 'c4'

)

ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/table2','{replica}')geTree()

PARTITION BY c1  

ORDER by (c1,c3)

SETTINGS index_granularity = 8192;  

三、引擎说明

zoo_path — ZooKeeper中该表的路径

replica_name — ZooKeeper 中的该表的副本名称。

去重引擎:ReplacingMergeTree

一、引擎特点  

该引擎和 MergeTree 的不同之处在于它会删除排序键值相同的重复项。

数据的去重只会在数据合并期间进行。

合并会在后台一个不确定的时间进行,因此你无法预先作出计划。

有一些数据可能仍未被处理。尽管你可以调用 OPTIMIZE 语句发起计划外的合并,但请不要依靠它,因为 OPTIMIZE 语句会引发对数据的大量读写。


二、去重副本引擎:ReplicatedReplacingMergeTree

建表语句:

CREATE TABLE cq_report_db.table2(

`c1` String comment 'c1',

`c2` Nullable(String) comment 'c2',

`c3` Int32 comment 'c3',

`c4` Decimal(10,2) comment 'c4'

)

ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/table2','{replica}')  

PARTITION BY c1  

ORDER by (c1,c3)

SETTINGS index_granularity = 8192;

聚合引擎:SummingMergeTree

一、引擎特点

当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,行包含了被合并的行中具有数值数据类型的列的汇总值。

如果主键的组合方式使得单个键值对应于大量的行,则可以显著的减少存储空间并加快数据查询的速度。

二、建表示例  

CREATE TABLE cq_report_db.table3(

`c1` String comment 'c1',

`c2` String comment 'c2',

`c3` String comment 'c3'  

)

ENGINE = SummingMergeTree(c1)

PARTITION BY c1  

ORDER by (c1,c3)

SETTINGS index_granularity = 8192;

相关文章
|
3月前
|
存储 SQL 消息中间件
ClickHouse(12)ClickHouse合并树MergeTree家族表引擎之AggregatingMergeTree详细解析
AggregatingMergeTree是ClickHouse的一种表引擎,它优化了MergeTree的合并逻辑,通过将相同主键(排序键)的行聚合为一行并存储聚合函数状态来减少行数。适用于增量数据聚合和物化视图。建表语法中涉及AggregateFunction和SimpleAggregateFunction类型。插入数据需使用带-State-的聚合函数,查询时使用GROUP BY和-Merge-。处理逻辑包括按排序键聚合、在合并分区时计算、以分区为单位聚合等。常用于物化视图配合普通MergeTree使用。查阅更多资料可访问相关链接。
169 4
|
3月前
|
存储 SQL 算法
ClickHouse(13)ClickHouse合并树MergeTree家族表引擎之CollapsingMergeTree详细解析
CollapsingMergeTree是ClickHouse的一种表引擎,它扩展了`MergeTree`,通过折叠行来优化存储和查询效率。当`Sign`列值为1和-1的成对行存在时,该引擎会异步删除除`Sign`外其他字段相同的行,只保留最新状态。建表语法中,`sign`列必须为`Int8`类型,用来标记状态(1)和撤销(-1)。写入时,应确保状态和撤销行的对应关系以保证正确折叠。查询时,可能需要使用聚合函数如`sum(Sign * x)`配合`GROUP BY`来处理折叠后的数据。使用`FINAL`修饰符可强制折叠,但效率较低。系列文章提供了更多关于ClickHouse及其表引擎的详细解析。
94 1
|
3月前
|
传感器 存储 SQL
ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析
GraphiteMergeTree是ClickHouse用于优化Graphite数据存储和汇总的表引擎,适合需要瘦身和高效查询Graphite数据的开发者。它基于MergeTree,减少存储空间并提升查询效率。创建表时需包括Path、Time、Value和Version列。配置涉及pattern、regexp、function和retention,用于指定聚合函数和数据保留规则。文章还提供了建表语句示例和相关资源链接。
63 1
|
3月前
|
存储 SQL 关系型数据库
ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析
`SummingMergeTree`是`MergeTree`引擎的变种,它合并相同主键的行并计算数值列的总和,从而节省存储空间和加速查询。通常与`MergeTree`配合使用,存储聚合数据以避免数据丢失。创建`SummingMergeTree`表时,可选参数`columns`指定要汇总的数值列。未指定时,默认汇总所有非主键数值列。注意,聚合可能不完整,查询时需用`SUM`和`GROUP BY`。文章还介绍了建表语法、数据处理规则以及对嵌套数据结构和`AggregateFunction`列的处理。查阅更多ClickHouse相关内容可访问相关链接。
132 5
|
3月前
|
存储 SQL 算法
ClickHouse(14)ClickHouse合并树MergeTree家族表引擎之VersionedCollapsingMergeTree详细解析
VersionedCollapsingMergeTree是ClickHouse的一种优化引擎,扩展了MergeTree,支持多线程异步插入和高效的数据折叠。它通过Sign和Version列处理对象状态的变化,Sign表示行的状态(正向或撤销),Version追踪状态版本。引擎自动删除旧状态,减少存储占用。在查询时,需注意可能需使用GROUP BY和聚合函数确保数据折叠,因为ClickHouse不保证查询结果已折叠。文章还提供了建表语法、使用示例和相关资源链接。
88 0
|
4月前
|
SQL 消息中间件 关系型数据库
ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析
`ReplacingMergeTree`是ClickHouse的一种表引擎,用于数据去重。与`MergeTree`不同,它在合并分区时删除重复行,但不保证无重复。去重基于`ORDER BY`列,在ver列未指定时保留最新行,否则保留ver值最大者。数据处理策略包括延迟合并导致的不确定性及按分区去重。`CREATE TABLE`语法中,`ReplacingMergeTree`需要指定可选的`ver`列。相关系列文章提供了更深入的解析。
137 0
|
4月前
|
存储 SQL 关系型数据库
ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析
ClickHouse的MergeTree系列引擎是其高性能大数据存储的核心,特别适合大量数据的快速插入。数据按主键排序,支持分区和数据副本,提供数据采样功能。建表时,通过`ENGINE = MergeTree()`指定引擎,`ORDER BY`指定排序键,可选`PARTITION BY`分区,`SAMPLE BY`进行采样。此外,MergeTree支持多种索引和设置,如`index_granularity`控制索引粒度。查询时,ClickHouse利用主键和索引来高效检索数据,尤其在使用等值或范围条件时。
41 0
|
OLAP 数据处理 数据库
聊聊ClickHouse向量化执行引擎-过滤操作
聊聊ClickHouse向量化执行引擎-过滤操作
306 0
|
数据挖掘 数据管理 测试技术
火山引擎:ClickHouse增强计划之“Upsert”
火山引擎:ClickHouse增强计划之“Upsert”
火山引擎:ClickHouse增强计划之“Upsert”
|
SQL 存储 缓存
13.【clickhouse】ClickHouse从入门到放弃-引擎
【clickhouse】ClickHouse从入门到放弃-引擎
13.【clickhouse】ClickHouse从入门到放弃-引擎