ClickHouse入门学习笔记

ClickHouse入门学习笔记,第1张

学习目标:clickhouse

clickhouse入门


clickhouse特点:

列式存储,clickhouse cpu占有率非常高,性能好吞吐大
clickhous inset一批数据的时候会保证原子性


docker使用命令:

1.docker run -it clickhouse/clickhouse-server /bin/bash

​ 2.clickhouse --help

​ 3.clickhouse start

​ 4.clickhouse-client //clickhouse-client -m 允许使用多行命令

​ 5.show databases //显示所有数据库

​ 6.use system //使用system数据库

​ 7.show tables //显示当前数据库所有的表

​ 8.quit退出clickhouse客户端

​ 9.cd /usr/bin //clickhouse的命令在这个目录下

​ 10.ls |grep click //搜索文件名带click

​ 11.cd /etc/clickhouse-server //核心的配置文件在这里

​ 12.cd /var/log/clickhouse-server //运行日志在这里

​ 13.cd /var/lib/clickhouse //数据存在这里,metadata是元数据sql文件,data目录下存的是真正的数据

​ 14.vi config.xml 把::放开就允许其他机子远程访问我们的数据库,改完需要重新clickhouse restart
15.pwd //显示当前所在目录


clickhouse数据库使用命令:

1.create database test //建一个test数据库

​2.show create database test Atomic是库引擎(less 文件名:查看文件)


clickhouse数据类型:

整型:
Int8[-128:127]占8个字节,对应java中的byte
Int16[-32767:32768]占16个字节,对应java中的short
Int32:int
Int64:long

无符号整型:
UInt8[0:255],UInt8[0:65535]

boolean:0表示true,1表示flase

浮点型:Float32-float,Float64-double

Decimal32(s):对精度有要求的用Decimal,s表示小数点后几位

字符类型:使用String类型代替所有字符串,varchar,blog存二进制的大字段,clog存文本的大字段

clickhouse中没有编码的概念,对于不同编码的文本,有不同的处理字符串的函数

枚举类型:Enum8和Enum16 用做1表示男性,2表示女性的这种情况,

CREATE TABLE** t_enum
(
  `sex` Enum8('nan' **=** 1, 'nv' **=** 2) 
)
**ENGINE** = TinyLog

枚举类型存的存的实际上是int8

数组类型:array(T)表示由类型组成的数组,T可以是任意类型

可为空类型: create table t_text ( test Nullable(Int8) ) ENGINE = TinyLog;

UUID类型:看官方文档介绍


rwx(Owner)r-x(Group)r-x(Other):这个例⼦表⽰的权限是:使⽤者⾃⼰可读,可写,可执⾏;同⼀组的⽤户可读,不可写,可执⾏;其它⽤户可读,不可写,可执⾏。
第⼆个栏位:表⽰⽂件个数。如果是⽂件的话,那这个数⽬⾃然是1了,如果是⽬录的话,那它的数⽬就是该⽬录中的⽂件个数了。
第三个栏位:表⽰该⽂件或⽬录的拥有者。若使⽤者⽬前处于⾃⼰的Home,那这⼀栏⼤概都是它的账号名称。
第四个栏位:表⽰所属的组(group)。每⼀个使⽤者都可以拥有⼀个以上的组,不过⼤部分的使⽤者应该都只属于⼀个组,只有当希望给
予某使⽤者特殊权限时,才可能会给他另⼀个组。
第五栏位:表⽰⽂件⼤⼩。⽂件⼤⼩⽤byte来表⽰,⽽空⽬录⼀般都是1024byte,当然可以⽤其它参数使⽂件显⽰的单位不同,如使⽤ls
–k就是⽤kb莱显⽰⼀个⽂件的⼤⼩单位,不过⼀般我们还是以byte为主。  
第六个栏位:表⽰最后⼀次修改时间。
第七个栏位:表⽰⽂件名。我们可以⽤ls –a显⽰隐藏的⽂件名。


用户名:default 密码:无


MergeTree表引擎

创建表:

partition by 分区键:分区键有降低数据扫描范围的作用,图上是按天分区。
metadata存的是t_stock.sql 建表语句
data目录下存在分区目录:

第一个1和第二个1表示:每个分区包含一定的数据块,数据块的最小值和数据块的最大值
0表示:数据合并的次数



data.bin是压缩后的数据,primary.idx是组件索引,用于加快查询效率的,data.mrk3用来描述data.bin中的数据和primary.idx的连接。
minmax_create_time.idx最大最小值的索引,带查询时间的时候判断是否是这一个块
columns.txt:存储列信息
count.txt:存了多少条数据,会让count语句非常快



仅用clickhouse-client客户端有分区效果


LSM树特点:在insert的时候先是把数据写入到内存中,后面再合并到硬盘当中(clickhouse后台来处理合并,合并的时间大概是10-15分钟左右)。查询会变慢,需要查内存中的数据和硬盘中的数据,然后进行合并。

手动合并:optimize table t_stock final 内存中的数据刷到硬盘(合并)。

把20200601 _1_1_0和20200601 _5_5_0合并成20200601 _1_5_1这个文件,clickhouse后面会进行一次大合并才会把两外两个文件删除。


order by排序建:分区有序的,加order by 可以通过更快速的查询


primary key 主键:clickhouse并不要求主键的唯一性。order by (id,sku_id) 两列排序
在metadata中的表结构加了index granularity=8192 每个id分区是间隔8192,但是id列重复太多就会大大超过这个值这时需要改这个值。


二级索引:在一级索引的基础上建立索引,在total_amount建立一个二级索引,粒度为5


TTL(time to live)存活时间:不能用于主键,当列中的值过期将会赋给默认值。必须指定一个时间列为起点(d)


ReplacingMergeTree表引擎

官方文档:ReplacingMergeTree.
该引擎和 MergeTree 的不同之处在于它会删除排序键值相同的重复项。

数据的去重只会在数据合并期间进行。合并会在后台一个不确定的时间进行,因此你无法预先作出计划。有一些数据可能仍未被处理。尽管你可以调用 OPTIMIZE 语句发起计划外的合并,但请不要依靠它,因为 OPTIMIZE 语句会引发对数据的大量读写。

因此,ReplacingMergeTree 适用于在后台清除重复的数据以节省空间,但是它不保证没有重复的数据出现。

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = ReplacingMergeTree([ver])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

ReplacingMergeTree 的参数:
ver — 版本列。类型为 UInt*, Date 或 DateTime。可选参数。
在数据合并的时候,ReplacingMergeTree 从所有具有相同排序键的行中选择一行留下:
如果 ver 列未指定,保留最后一条。
如果 ver 列已指定,保留 ver 值最大的版本。

对于ReplactingMergeTree需要注意的几个重点:

  1. ReplacingMergeTree是按照order by 指定的排序键作为判断重复的标准。
  2. 他的去重只限定在一个分区中不能跨区去重。
  3. 对于判断为重复的数据,保留版本字段最大的一条数据,如果没有指定版本 值或者版本值也有重复的,就会保留最后插入的一条数据。
  4. ReplacingMergeTree并不能始终保证数据是完全去重的。数据去重只会发生在同一批插入数据以及后台数据合并这两个时机。

SummingMergeTree

SummingMergeTree会对重复的数据进行sum累加再合并
两次insert不会立即合并,需要手动optimize。


数据的修改

clickhouse的数据修改是比较重的 *** 作,需要新建临时分区,然后再合并,所以不介意直接修改数据,采用表引擎对数据进行 *** 作比较合适。

 -- 删除 *** 作
 altertablet_stockdeletewheresku_id='sku_001';
 -- 修改 *** 作
 altertablet_stockupdatetotal_amount=toDecimal132(2000.00,2)whereid=2;

数据查询

官方文档查看数据查询.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/799574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存