1、先来讲一下,ClickHouse为啥快mysql
2、建立库sql
CREATE/ATTACH DATABASE zabbix ENGINE = Ordinary;数据库
ATTACH 也能够建库,可是metadata目录下不会生成.sql文件,通常用于metadata元数据sql文件被删除后,恢复库表结构使用缓存
3、建立本地表分布式
CREATE TABLE test02( id UInt16,col1 String,col2 String,create_date date ) ENGINE = MergeTree(create_date, (id), 8192);函数
ENGINE:是表的引擎类型,工具
MergeTree:最经常使用的,MergeTree要求有一个日期字段,还有主键。线程
Log引擎没有这个限制,也是比较经常使用。server
ReplicatedMergeTree:MergeTree的分支,表复制引擎。xml
Distributed:分布式引擎。
create_date:是表的日期字段,一个表必需要有一个日期字段。
id:是表的主键,主键能够有多个字段,每一个字段用逗号分隔。
8192:是索引粒度,用默认值8192便可。
4、建立分布式表
CREATE TABLE distributed_table AS table ENGINE = Distributed(cluster, db, table, rand());
cluster:配置文件中的群集名称。
db:库名。
table:本地表名。
rand():分片方式:随机。
intHash64():分片方式:指定字段作hash。
Distribute引擎会选择每一个分发到的Shard中的”健康的”副本执行SQL
5、DDL
若是想按集群操做,须要借助zookeeper,在config.xml中添加配置
<distributed_ddl>
<path>/clickhouse/task_queue/ddl</path>
</distributed_ddl>
一个节点建立表,会同步到各个节点
CREATE TABLE db.table [ON CLUSTER cluster] (...)
添加、删除、修改列
ALTER TABLE [db].table [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...
rename 支持*MergeTree和Distributed
rename table db.table1 to db.table2 [ON CLUSTER cluster]
truncate table db.table;不支持Distributed引擎
6、delete/update 不支持Distributed引擎
ALTER TABLE [db.]table DELETE WHERE filter_expr...
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE ...
7、分区表
按时间分区:
toYYYYMM(EventDate):按月分区
toMonday(EventDate):按周分区
toDate(EventDate):按天分区
按指定列分区:
PARTITION BY cloumn_name
对分区的操做:
alter table test1 DROP PARTITION [partition] #删除分区
alter table test1 DETACH PARTITION [partition]#下线分区
alter table test1 ATTACH PARTITION [partition]#恢复分区
alter table .test1 FREEZE PARTITION [partition]#备份分区
8、数据同步
1) 采用remote函数
insert into db.table select * from remote('目标IP',db.table,'user','passwd')
2) csv文件导入clickhouse
cat test.csv | clickhouse-client -u user --password password --query="INSERT INTO db.table FORMAT CSV"
3) 同步mysql库中表
CREATE TABLE tmp ENGINE = MergeTree ORDER BY id AS SELECT * FROM mysql('hostip:3306', 'db', 'table', 'user', 'passwd') ;
4) clickhouse-copier 工具
9、时间戳转换
select toUnixTimestamp('2018-11-25 00:00:02');
select toDateTime(1543075202);
10、其余事项
1) clickhouse的cluster环境中,每台server的地位是等价的,即不存在master-slave之说,是multi-master模式。
2) 各replicated表的宿主server上要在hosts里配置其余replicated表宿主server的ip和hostname的映射。
3) 上面描述的在不一样的server上创建全新的replicated模式的表,若是在某台server上已经存在一张replicated表,而且表中已经有数据,这时在另外的server上执行完replicated建表语句后,已有数据会自动同步到其余server上面。
4) 若是zookeeper挂掉,replicated表会切换成read-only模式,再也不进行数据同步,系统会周期性的尝试与zk从新创建链接。
5) 若是在向一张replicated表insert数据的时候zookeeper挂掉,这时候会抛一个异常,等到与zk从新创建链接之后,系统(其余replicated表所在server)会检查本地文件与预期文件(保存在zk上)的差异,若是是轻微的差异,直接同步覆盖,若是发现有数据块损坏或者识别不了,则将这些数据文件移动到“detached”子目录,而后从新根据zk所记录的文件信息进行副本的同步。
6) drop掉某一台server上的replicated表,不会对其余server上面的replicated表形成影响。