Clickhouse学习

https://www.cnblogs.com/grapelet520/p/11280972.html#_label4

https://www.jianshu.com/p/a5bf490247ea

centos 7 下按照Clickhouse

1.官网下载rpm包:https://packagecloud.io/Altinity/clickhouse
我个人下载的:

rpm -ivh clickhouse-server-common-20.1.11.73-1.el7.x86_64.rpm
rpm -ivh clickhouse-common-static-20.1.11.73-1.el7.x86_64.rpm
rpm -ivh clickhouse-server-20.1.11.73-1.el7.x86_64.rpm
rpm -ivh clickhouse-client-20.1.11.73-1.el7.x86_64.rpm

service clickhouse-server start

clickhouse-client

停止:
service clickhouse-server stop

启动:
service clickhouse-server start

用clickhouse-client连接本机clickhouse-server服务器:
Clickhouse-client

用本机clickhouse-client连接远程clickhouse-server服务器:
clickhouse-client –host 192.168.3.54 –port 9000 –database default–user default –password

放开远程访问
vi /etc/clickhouse-server/config.xml
修改服务器的配置文件/etc/clickhouse-server/config.xml,第88行,放开注释即可,修改之后的内容如下:

<listen_host>::</listen_host> <--------主要这一行


2.登录:默认default 用户,无需密码
创建用户:vim /etc/clickhouse-server/users.xml 修改users.xml文件
<users>
.......
<sangfor> --->用户名
<networks incl="networks" replace="replace">
<ip>::/0</ip> ---->允许所有地址访问
</networks>
<password>*****123</password> ---->明文密码
<profile>default</profile>
<quota>default</quota>
</sangfor>
........
</users>
如通过 /etc/clickhouse-server/user.xml 创建用户:sangfor
指定用户登录:clickhouse-client -u sangfor --password your_pwd

3.创建数据库:
CREATE DATABASE test ENGINE = Ordinary;
创建表:
CREATE TABLE db.tb1
(
`id` UInt16,
`col1` String,
`col2` String,
`create_date` date
)
ENGINE = MergeTree(create_date, id, 8192)

ENGINE:是表的引擎类型,

MergeTree:最常用的,MergeTree要求有一个日期字段,还有主键。

Log引擎没有这个限制,也是比较常用。

ReplicatedMergeTree:MergeTree的分支,表复制引擎。

Distributed:分布式引擎。

create_date:是表的日期字段,一个表必须要有一个日期字段。

id:是表的主键,主键可以有多个字段,每个字段用逗号分隔。

8192:是索引粒度,用默认值8192即可。

DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster] #删除数据库
DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster] #删除表

drop table if exists test.tb1;

创建表:
create table test.tb1 (sdt Date, id UInt16, name String, point UInt16) ENGINE=MergeTree(sdt, (id, name), 10);

插入数据:
insert into test.tb1 (sdt, id, name, point) values ('2020-04-28',12,'sangfor',20);

二、创建表规则 ENGINE = MergeTree(date,id,8192)

MergeTree引擎提供了根据日期进行索引和根据主键进行索引,同时提供了实时更新数据的功能(如,在写入数据的时候就可以对已写入的数据进行查询,不会阻塞。),mergetree是clickhouse里最先进的表引擎,不要跟merge引擎混淆。

  这个引擎接受参数形式如下:日期类型的列,可选的示例表达式,一个元祖定义了这个表的主键,索引的间隔尺寸。

MergeTree(EventDate,(CounterID,EventDate),8192)

包含示例的mergeTree:

MerTree(EventDate,intHash32(UserId),(CounterID,EventDate,intHash32(UserID)),8192)

MergeTree

  一个mergetree类型的表必须有一个包含date类型的列,在上面的例子里,该列是EventDate,这个日期列的类型必须是'Date'(不是‘DateTime’)

  这个主键必须是一个元祖,元素内容通常是表里的列或者一个单一的表达式。

  这个可选的示例可以是任何的表达式,但是这个表达式必须出现在主键里.上面的示例里使用的是一个哈希类型的userID,来伪随机的对主键里的CounterID和EventDate进行打散。换句话说,当使用了这个示例列的时候,可以伪随机的将用户打散成为均匀的子集。

  这个表是由很多个part构成。每一个part按照主键进行了排序,除此之外,每一个part含有一个最小日期和最大日期。当插入数据的时候,会创建一个新的sort part,同时会在后台周期性的进行merge的过程,当merge的时候,很多个part会被选中,通常是最小的一些part,然后merge成为一个大的排好序的part。

  换句话说,整个这个合并排序的过程是在数据插入表的时候进行的。这个merge会导致这个表总是由少量的排序好的part构成,而且这个merge本身并没有做特别多的工作。

  在插入数据的过程中,属于不同的month的数据会被分割成不同的part,这些归属于不同的month的part是永远不会merge到一起的。这么做的目的是provide local data modification(比较容易做备份)。

  这些part在进行合并的时候会有一个大小的阈值,所以不会有太长的merge过程。

  对于每一个part,会生成一个索引文件。这个索引文件存储了表里面每一个索引块里数据的主键的value值,换句话说,这是个对有序数据的小型索引。

  对列来说,在每一个索引块里的数据也写入了标记,从而让数据可以在明确的数值范围内被查找到。

  当读表里的数据时,SELECT查询会被转化为要使用哪些索引。这些索引会被用在判断where条件或者prewhere条件中,来判断是否打中了这些索引区间。

  因此,能够快速查询一个或多个主键范围的值。在下面的示例中,能够快速的查询一个明确的counter,指定范围的日期区间里的一个明确的counter,各种counter的集合等。

原文地址:https://www.cnblogs.com/shiqi17/p/12796854.html