ClickHouse入门:表引擎-MergeTree(一)创建方式

x33g5p2x  于2021-12-25 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(573)

前言
插件及服务器版本
服务器:ubuntu 16.04
ClickHouse:20.9.3.45

简介

这篇文件简单学习下ClickHouse基础的合并树(MergeTree)表引擎的创建方式,关于合并树基础上的如Replacing、Summing、Aggregating引擎,本文暂时不会涉及。MergeTree作为最基础的引擎,提供了主键索引、数据分区、数据副本等基本能力

创建方式

create table db_name.table_nmae(
...
)ENGINE MergeTree()
PARTITION BY  expr
ORDER BY expr
PRIMARY KEY expr
SAMPLE BY expr
SETTING name=values,...
;

参数说明:

  • PARTITION BY
    (选填):分区键,用于指定表数据以何种标准进行分区,分区键可以是单个字段,也可以是多个字段,同时也支持使用列表达式,如果不声明分区键,会统一生成一个名为all的分区,合理使用分区可以有效的减少查询时数据文件的扫描范围
    1、没有分区键时,创建表后的数据目录结构
create table m_retailitem2(
	ID   String,
	...
)ENGINE MergeTree()
ORDER BY (CREATIONDATE,MODIFIEDDATE);

这里只有一个前缀为all的分区,后边的1和222分别是最小数据块编号和最大数据块编号,7为该分区合并的次数
2、有一个分区键时,根据日期年月进行分区,将日期字符串“2012-11-23 11:24:40.0”转成“201211”作为分区键

create table m_retailitem3(
	ID     String,
	...
)ENGINE MergeTree()
ORDER BY (CREATIONDATE,MODIFIEDDATE)
PARTITION BY toYYYYMM(toDate(parseDateTimeBestEffortUS(CREATIONDATE)))
;

  • ORDER BY(必填):排序键,用于指定在一个数据片段内,数据以何种标准排序。默认情况下主键与排序键相同,排序键既可以是单列字段,也可以是多列字段(CREATIONDATE,MODIFIEDDATE),当使用多列字段时,在单个数据片段内,数据首先以CREATIONDATE排序,相同CREATIONDATE的数据再按MODIFIEDDATE排序。
  • PRIMARY KEY(选填):主键,声明后会依据主键字段生成1级索引,用于加速查询,默认情况下,主键与排序键相同,所以可以直接用order by代替主键,与其它数据库不同的是ClickHouse的主键允许存在重复数据(ReplacingMergeTree引擎可以去重,后续介绍)
  • SAMPLE BY(选填):采样表达式,用于声明数据以何种标准进行采样。如果使用了此配置项,那么在主键的配置中需要声明同样的表达式,例如:
create table m_retailitem4(
		ID                            UInt64,
		...
	)ENGINE MergeTree()
	ORDER BY (CREATIONDATE,MODIFIEDDATE,intHash32(ID))
	PARTITION BY toYYYYMM(toDate(parseDateTimeBestEffortUS(CREATIONDATE)))
	SAMPLE BY intHash32(ID)
	;
  • SETTING:选填 可设置的参数如下
    1、index_granularity:参数索引的粒度,默认值为8192,也就是说MergeTree的索引在默认情况下,每间隔8192行数据才生成一条索引
    2、index_granularity_bytes:该参数设置索引根据数据体量的大小动态划分间隔大小,默认为10M
    3、enable_mixed_granularity_parts:设置是否自适应索引间隔的功能,默认开启
    4、merge_with_ttl_timeout:mergetree的TTL功能(数据的存活时间),可以为某个字段或者某张表设置TTL
    字段级别的TTL:
create table m_retailitem6(
		ID                            UInt64,
		MODIFIEDDATE DateTime,
		NUM UInt8 TTL MODIFIEDDATE + INTERVAL 10 SECOND
	)ENGINE MergeTree()
	ORDER BY (MODIFIEDDATE,intHash32(ID))
	SAMPLE BY intHash32(ID)
	;

表级别TTL:

create table m_retailitem7(
		ID                            UInt64,
		MODIFIEDDATE DateTime
	)ENGINE MergeTree()
	ORDER BY (MODIFIEDDATE,intHash32(ID))
	TTL MODIFIEDDATE  + INTERVAL 20 DAT
	;

5、storage_policy:多路径存储策略
目前的三种存储策略
默认存储策略
JBOD策略:多次盘策略
HOT/COLD策略:冷热存储策略,根据不同的磁盘类型做冷热存储
备注: storage_policy后续做详细介绍

相关文章