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

it2026-08-24  2

前言 插件及服务器版本 服务器: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后续做详细介绍

最新回复(0)