从本文开始,我们介绍的表引擎就是比较重要的,也是日常工作中最常用的,这些表引擎都主要在MergeTree系列里面。
在MergeTree系列的表引擎有:
1、MergeTree、 2、ReplacingMergeTree、 3、SummingMergeTree(汇总求和功能)、 4、AggregatingMergeTree(聚合功能)、 5、CollapsingMergeTree(折叠删除功能)、 6、VersionedCollapsingMergeTree(版本折叠功能)引擎
这里着重介绍的是MergeTree引擎。这里的MergeTree引擎是目前clickhouse里面性能最强大,使用范围最广的表引擎,同时他也是官方主推的存储引擎,他支持:
1、主键索引,存储的时候按照主键排序。 2、数据分区,可以通过parition by语句指定分区字段 3、数据副本 4、数据采样 5、删除 6、修改 7、等等功能。
所以我们在实际工作中不管是做数仓还是做其他的建议BI业务,都可以直接使用这里的MergeTree表引擎。这里我们创建MergeTree引擎的语法是:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], ... INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1, INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2 ) ENGINE = MergeTree() ORDER BY expr [PARTITION BY expr] [PRIMARY KEY expr] [SAMPLE BY expr] [TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...] [SETTINGS name=value, ...]
对于上诉对应的参数说明如下:
1、on cluster这里主要是指定集群,如果clickhouse是集群分片的方式,那么一定要指定,这样子在集群任何一台机器都能查询到完整的数据,不然就只能在特定的节点查询出来数据。 2、engine这里直接指定MergeTree即可。 3、order by这里主要是指定排序字段,多个字段的话,可以使用order by (col1,col2).这里一般我们的排序字段都是主键,如果当前表没有指定主键并且不需要进行排序,那么可以使用order by tuple() 4、partition by 分区字段,例如我们经常按照月进行分区,所以这里使用函数进行分区就可以了,示例: partition by toYYYYMM(cts),分区名称的格式就是YYYYMM,如果是按年,则是toYYYY(cts)即可 5、primary key 这里主要是指定主键,这里指定主键的效果只是为某个字段添加索引加快查询,而无法进行去重,所以这里的主键和mysql的主键效果还不是完全一样。 6、sample by 这里是用来采样的字段,主要是用来在查询中对数据进行抽样的功能,可以快速获取极大数据量的一小部分集合,避免出现处理大数据集时出现内存不足的情况。具体的语法是: sample by intHash32(id)这种 7、TTL,这里是指定数据过期时间,当数据存储时间满足ttl的时候,则数据会被直接给删除掉,这里的ttl可以指定某张表,也可以指定某张表里面的某一列,例如在某列中设置ttl,示例如下: CREATE TABLE test.users( id Int32, name String, age Int32, cts DateTime, tmp_ico String TTL cts + INTERVAL 10 SECOND ) ENGINE = MergeTree PARTITION BY toYYYYMM(cts) ORDER BY id 如果要指定表级别的ttl的话,示例如下: CREATE TABLE test.users( id Int32, name String, age Int32, cts DateTime, tmp_ico String ) ENGINE = MergeTree PARTITION BY toYYYYMM(cts) ORDER BY id TTL cts + INTERVAL 1 MONTH 8、settings,这个参数是一些额外的参数配置。
以上就是关于创建MergeTree表引擎的语法,下面我们使用常用的方式创建一个MergeTree表引擎的示例:
CREATE TABLE test.users( id Int32, name String, age Int32, cts DateTime, tmp_ico String ) ENGINE = MergeTree PARTITION BY toYYYYMM(cts) primary key id ORDER BY id
常用的方式,我们主要是指定表属性,分区,主键,排序字段即可,创建完成之后如下图:
以上就是MergeTree表引擎的创建案例。
备注:
1、使用MergeTree表引擎的话,每次插入数据都会生成一个数据片,clickhouse后台等待15分钟左右会合并数据片。 2、目前使用MergeTree表引擎的话,支持分区,目前也只有MergeTree系列的表引擎才支持分区。 3、TTL这块根据实际情况使用即可,一般应用在表级别,很少部分特定场景才会应用在列级别。
还没有评论,来说两句吧...