点击进入: ClickHouse官网文档
2.1.1、Centos 取消打开文件数限制
vim /etc/security/limits.conf
vim /etc/security/limits.d/20-nproc.conf
##编辑上面两个文件,添加下面内容,记得两个文件都添加,在文件末尾添加
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
2.1.2、安装ClickHouse依赖环境
yum install -y libtool
yum install -y *unixODBC*
2.1.3、CentOS 取消 SELINUX
#修改/etc/selinux/config 中的 SELINUX=disabled
vim /etc/selinux/config
2.2.1、安装包准备
可自行去官网把下图中的四个安装包下载下来, 下载地址:http://repo.red-soft.biz/repos/clickhouse/stable/el7/2.2.2、安装
上传到centos中的某一目录中,在目录中执行如下命令。rpm -ivh *.rpm
安装过程中,出现下面情况,是让你输入默认密码的,自己随便输入,一般输入root即可。也可以不设置密码,直接按回车键即可
sudo rpm -qa|grep clickhouse
2.2.3、修改配置文件
把
vim /etc/clickhouse-server/config.xml
2.2.4、启动clickhouse
注意,启动clickhouse是开机自启的。
#查看clickhouse状态
systemctl status clickhouse-server
#启动clickhouse
systemctl start clickhouse-server
#重启clickhouse
systemctl restart clickhouse-server
#查看防火墙状态
systemctl status firewalld.service
#暂时关闭防火墙
systemctl stop firewalld.service
#永久关闭防火墙
systemctl disable firewalld.service
#使用该命令,是禁制clickhouse开机自启,不过一般我们都是需要开机自启,
#所以不执行下面这条命令了
systemctl disable clickhouse-server
2.2.5、终端链接clickhouse,终端进入数据库命令
#如果在上面没设置默认密码,执行clickhouse-client -m即可
clickhouse-client -m
#如果在上面设置了默认密码,执行clickhouse-client --password,然后按回车输入密码,就可以进入了
clickhouse-client --password
#查看数据库
show databases;
#进入指定数据库
use defalut;
#查询库里面的所有表
show tables;
bin/ ====> /usr/bin/ #可执行文件路径
conf/ ====> /etc/clickhouse-server #配置文件路径
lib/ ====> /var/lib/clickhouse #数据存放路径
log/ ====> /var/log/clickhouse #日志路径
MergeTree 引擎是ClickHouse中最常用的,地位相当于mysql的innodb,下面介绍下MergeTree引擎的一些特性
建表语句
create table t_student_mg(
id UInt32,
stu_id String,
total_score Decimal(16,2),
create_time Datetime
) engine =MergeTree
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,stu_id);
插入数据
insert into t_student_mg values
(101,'stu_001',500,'2023-06-01 12:00:00') ,
(102,'stu_002',520,'2023-06-01 11:00:00'),
(102,'stu_004',666,'2023-06-01 12:00:00'),
(102,'stu_002',720,'2023-06-01 13:00:00'),
(102,'stu_002',222,'2023-06-01 13:00:00'),
(102,'stu_002',555,'2023-06-02 12:00:00');
分区非必选的属性。
1、分区后,面对涉及跨分区的查询统计,ClickHouse 会以分区为单位并行处理, 即一个线程处理一个分区内的数据,单条查询就能利用整机所有 CPU。极致的并行处理能力,极大的降低了查询延时。说明ClickHouse在高性能的同时,是需要高服务器的。#手动合并分区命令
optimize table 表名称 final;
主键是非必选的属性。
1、ClickHouse 中的主键,和其他数据库不太一样,它只提供了数据的一级索引(稀疏索引),但是却不是唯一约束。这就意味着是可以存在相同 primary key 的数据的。排序是必选的属性。
1、order by 排序,是对分区内的排序
2、主键必须是 order by 字段的前缀字段,比如 order by 字段是 (id,stu_id) 那么主键必须是 id 或者(id,stu_id)。
二级索引是非必选的属性。
后面讲哈,基本很少用到,即使用到,不会也没关系数据TTL是非必选的属性。
1、ClickHouse中分为表级TTL和列级TTL, 表级TTL就是表中的某些行数据到期了,会自动删除;列级TTL则是对表中的某些字段设置过期时间,一旦过期,表中的该字段则会变成0。create table t_student_mg2(
id UInt32,
stu_id String,
total_score Decimal(16,2),
create_time Datetime
) engine =MergeTree
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,stu_id)
TTL create_time + INTERVAL 1 MONTH DELETE
1、ReplacingMergeTree是基于MergeTree 延申出的一个表引擎,它存储特性完全继承 MergeTree,只是多了一个去重的功能。 虽然 MergeTree 可以设置主键,但是 primary key 其实没有唯一约束的功能。如果你想处理掉重复的数据,可以借助这个 ReplacingMergeTree。去重按照order by的字段去重
2、数据的去重只会在合并的过程中出现;去重只会在分区内部进行去重,不能执行跨分区的去重。#表创建
create table t_student_mg3(
id UInt32,
sku_id String,
total_score Decimal(16,2) ,
create_time Datetime
) engine =ReplacingMergeTree(create_time)
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id, sku_id);
create table t_student_mg4(
id UInt32,
sku_id String,
total_score Decimal(16,2) ,
create_time Datetime
) engine =SummingMergeTree(total_score)
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id );
3、设计聚合表的话,尽可能的所有字段全部是维度、度量或者时间戳。#标准sql插入语句
insert into [table_name] values(…),(….)
#从表到表的插入
insert into [table_name] select a,b,c from [table_name_2]
#删除语句
alter table t_student_mg delete where stu_id ='stu_001';
#更新语句
alter table t_student_mg update total_score=toDecimal32(2000,2) where id = 102;
2、删除和更新后,虽然通过sql查看确实是生效了。但是数据没从磁盘删除,只有在触发分区合并的时候,才会删除旧数据释放磁盘空间。
#该sql查询如下图所示
SELECT * from t_student_mg;
5、with rollup:从右至左去掉维度进行小计。select id , stu_id,sum(total_score) from t_student_mg group by id,stu_id with rollup;
6、with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计。和第五条一样理解即可
select id , stu_id,sum(total_score) from t_student_mg group by
id,stu_id with cube;
7、with totals: 只计算合计
select id , stu_id,sum(total_score) from t_student_mg group by
id,stu_id with totals;
#新增字段,after col1指的是新增的字段在col1字段后面
alter table tableName add column newcolname String after col1;
#修改字段类型
alter table tableName modify column 字段名称 String;
#删除字段
alter table tableName drop column 字段名称;
开机后发现clickHouse服务起不来,具体查看了下日志信息,如下图所示:
日志说是/var/lib/clickhouse/store/f66/f66f1f2e-cc4d-47ea-b33d-f0cabf63aa63/202304_93_93_0目录损坏了
处理方法:
进入到损坏的目录 cd /var/lib/clickhouse/store 执行mv f66/ f66_bak命令,不用担心/f66目录下的文件,clickhouse会重新生成个f66目录的,然后clickhouse就正常启动了