ClickHouse 基础

news/2024/10/19 7:35:45/

ClickHouse2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询OLAP,能够使用SQL查询实时生成分析数据报告。

一、列式存储

以下面的Tabel为例

IDNameGender
1吴彦祖
2刘亦菲
3陈冠希

【1】采用行式存储时,数据在磁盘上的组织结构为:优点是获取某人所有的属性时,可以通过一次磁盘查找加顺序读取就可以。但需要查所有人的姓名时,遍历的很多不需要的数据,甚至需要全表扫描才行。

1吴彦祖2刘亦菲3陈冠希

【2】采用列式存储时,数据在磁盘上的组织结构为:查询所有人的姓名时只需把姓名那一列拿出来就可以了

123吴彦祖刘亦菲陈冠希

列式储存的优点:
【1】对于列的聚合,计数,求和等统计操作优于行式存储。
【2】由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
【3】由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于cache也有了更大的发挥空间。

二、表引擎

表引擎是ClickHouse的一大特色。可以说,表引擎决定了如何存储表的数据。表引擎的使用方式就是必须显式在创建表时定义该表使用的引擎,以及引擎使用的相关参数。特别注意:引擎的名称大小写敏感

MergeTree

ClickHouse中最强大的表引擎当属MergeTree合并树引擎及该系列*MergeTree中的其他引擎,支持索引和分区,地位可以相当于Innodb之于Mysql。而且基于MergeTree还衍生除了很多子产品,也是非常有特色的引擎。

建表语句: MergeTree其实还有很多参数(绝大多数用默认值即可),但是三个参数是更加重要的,也涉及了关于MergeTree的很多概念。

create table t_order_mt(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime
) engine =MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id);

插入数据

insert into t_order_mt values
(101,'sku_001',1000.00,'2020-06-01 12:00:00')

partition by分区(可选): 学过hive的应该都不陌生,分区的目的主要是降低扫描的范围,优化查询速度。如果不填,只会有一个分区。分区目录: MergeTree是以列文件+索引文件+表定义文件组成的,但是如果设定了分区那么这些文件就会保存到不同的分区目录中。并行: 分区后,面对涉及跨分区的查询统计,ClickHouse会以分区为单位并行处理。

数据写入与分区合并:任何一个批次的数据写入都会产生一个临时分区,不会纳入任何一个已有的分区。写入后的某个时刻(大概 10-15 分钟后),ClickHouse会自动执行合并操作(等不及也可以手动通过optimize执行),把临时分区的数据,合并到已有分区中。

optimize table xxxx final;

例如: 再次执行上面的插入操作

insert into t_order_mt values
(101,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(102,'sku_002',2000.00,'2020-06-01 11:00:00'),
(102,'sku_004',2500.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 13:00:00'),
(102,'sku_002',12000.00,'2020-06-01 13:00:00'),
(102,'sku_002',600.00,'2020-06-02 12:00:00');

查看数据并没有纳入任何分区

手动optimize之后,再次查询

hadoop102 :) optimize table t_order_mt final;

primary key主键(可选):ClickHouse中的主键,和其他数据库不太一样,它只提供了数据的一级索引,但是却不是唯一约束。这就意味着是可以存在相同primary key的数据的。主键的设定主要依据是查询语句中的where条件。根据条件通过对主键进行某种形式的二分查找,能够定位到对应的 index granularity,避免了全表扫描。index granularity:直接翻译的话就是索引粒度,指在稀疏索引中两个相邻索引对应数据的间隔。ClickHouse中的MergeTree默认是8192。官方不建议修改这个值,除非该列存在大量重复值,比如在一个分区中几万行才有一个不同数据。

稀疏索引:稀疏索引的好处就是可以用很少的索引数据,定位更多的数据,代价就是只能定位到索引粒度的第一行,然后再进行进行一点扫描。

order by(必选):order by设定了分区内的数据按照哪些字段顺序进行有序保存。order byMergeTree中唯一一个必填项,甚至比primary key还重要,因为当用户不设置主键的情况,很多处理会依照order by的字段进行处理(比如后面会讲的去重和汇总)。要求:主键必须是order by字段的前缀字段。比如order by字段是id,sku_id那么主键必须是id或者id,sku_id

二级索引

目前在ClickHouse的官网上二级索引的功能在v20.1.2.4之前是被标注为实验性的,在这个版本之后默认是开启的。

老版本使用二级索引前需要增加设置是否允许使用实验性的二级索引(v20.1.2.4开始,这个参数已被删除,默认开启)

set allow_experimental_data_skipping_indices=1;

创建测试表: 其中GRANULARITY N是设定二级索引对于一级索引粒度的粒度。

create table t_order_mt2(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime,
INDEX a total_amount TYPE minmax GRANULARITY 5
) engine =MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id, sku_id);

插入数据

insert into t_order_mt2 values
(101,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(102,'sku_002',2000.00,'2020-06-01 11:00:00'),
(102,'sku_004',2500.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 13:00:00'),
(102,'sku_002',12000.00,'2020-06-01 13:00:00'),
(102,'sku_002',600.00,'2020-06-02 12:00:00');

对比效果: 那么在使用下面语句进行测试,可以看出二级索引能够为非主键字段的查询发挥作用。

[root lib]$ clickhouse-client --send_logs_level=trace <<< 'select * from t_order_mt2 where total_amount > toDecimal32(900., 2)';


http://www.ppmy.cn/news/203370.html

相关文章

超焦距详解

1.什么是超焦距 当镜头对焦在无穷远时&#xff0c;景深前界&#xff08;离镜头最近清晰点&#xff09;到镜头的距离称之为超焦距。 换句话说当镜头对焦在这个超焦距点时&#xff0c;从这个超焦距点到相机一半的距离开始到无穷远都是清晰的。 有点绕是吧&#xff1f; 那我们直接…

中国音视频产业大会召开 当贝超短焦激光投影U1斩获“年度科技创新奖”

​12月26日&#xff0c;由中国电子视像行业协会主办、中彩联和洛图科技&#xff08;RUNTO&#xff09;协办的第十八届中国音视频产业大会&#xff08;AVF&#xff09;暨“科技创新奖”颁奖礼在北京线上线下同步召开&#xff0c;大会主题为“创新赋能产业、智享美好生活、聚势全…

4K分辨率搭配光学变焦功能,极米H6成旗舰家用投影首选

近几年&#xff0c;我国投影机市场产品竞争日趋激烈&#xff0c;以极米为代表的国产品牌迅速崛起并逐步超越国际品牌成为中国投影机市场的领跑者。虽然目前国产投影仪品牌比较多&#xff0c;但其中极米科技旗下的产品最受消费者青睐。IDC数据显示&#xff0c;2022年上半年&…

思享无限组建技术团队;伏达半导体推出50W车载无线充解决方案;峰米科技推出超短焦激光投影仪 | 全球TMT...

国内市场 思享无限宣布组建一支具有AI和游戏开发经验的工程师团队&#xff0c;帮助合作伙伴GFE基金会的艺术家在OpenSea、Rarible和Foundation等主要平台推广他们的数字艺术品。思享无限始终致力于为旗下直播平台培养尖端技术团队&#xff0c;以及挖掘多样化的娱乐内容&#xf…

全球三大设计奖之一“IDEA奖”公布,富士无反数码相机X100V获铜奖

上海2021年9月26日 /美通社/ -- 近日&#xff0c;由美国工业设计师协会&#xff08;IDSA&#xff09;主办的设计大奖、2021国际设计卓越奖“IDEA奖”&#xff08;International Design Excellence Award&#xff09;公布&#xff0c;富士胶片高端无反数码相机FUJIFILM X100V荣获…

坚果O1投影仪怎么样?适合上班族使用吗?性价比高不高?

哈喽呀各位看官好&#xff0c;里面请里面坐&#xff0c;今天也来听狗子掰扯掰扯投影仪那些事儿。 据说最近坚果O1智慧墙的风很大呀&#xff0c;就有很多小伙伴让狗子讲讲这个超短焦是啥&#xff1f;这款坚果O1值不值得入手啊&#xff1f; 坚果O1 狗子刚开始看到坚果O1的时候心…

2023智源大会议程公开丨AI开源论坛

6月9日&#xff0c;2023北京智源大会&#xff0c;将邀请这一领域的探索者、实践者、以及关心智能科学的每个人&#xff0c;共同拉开未来舞台的帷幕&#xff0c;你准备好了吗&#xff1f;与会知名嘉宾包括&#xff0c;图灵奖得主Yann LeCun、图灵奖得主Geoffrey Hinton、OpenAI创…

C语言指针学习(一)

指针的重要性不言而喻&#xff0c;是C语言的核心内容之&#xff0c;不过忘得差不多了&#xff0c;最近因个人发展原因开始重拾C语言知识&#xff0c;现将郝斌老师视频学习笔记整理成博文&#xff0c;方便日后复盘巩固&#xff0c;能力有限&#xff0c;若有不足之处&#xff0c;…