目录
安装之流直接略过,就是下载四个包然后rpm安装。
登录默认没密码,用
clickhouse-client -m
直接登录进去就是类似于mysql的交互式界面(类似于mysql -h XXX -p)
-m指的是multiline,表示单次输入可以换行;
create
CREATE TABLE learnClickhouse.student
(
`id` UInt64,
`name` String,
`age` UInt32,
`HaveMoney` Float64,
`attrb` UInt32,
`create_time` DateTime
)
ENGINE = MergeTree
PARTITION BY toYYYYMMDD(create_time)
ORDER BY id
SETTINGS index_granularity = 8192
Insert
只显示部分示例,其他的自己按需加入
insert into student(*) values (7,'朱竹青ghostcatwith great attack power',22,150000,'2000-12-31 00:00:00');
insert into student(*) values (6,'小舞hunshou魂兽MonsterBeingGod',22,150000,'2000-12-11 00:00:00');
普通select
select * from student;
类似mysql的语法
结果:
1 rows in set. Elapsed: 0.003 sec.
littleserver :) select * from student;
SELECT *
FROM student
Query id: 9fa0f544-664d-4d1a-98b3-9524e5da1485
┌─id─┬─name───────────────────────────┬─age─┬─HaveMoney─┬─attrb─┬─────────create_time─┐
│ 6 │ 小舞hunshou魂兽MonsterBeingGod │ 22 │ 150000 │ 2 │ 2000-12-11 00:00:00 │
└────┴────────────────────────────────┴─────┴───────────┴───────┴─────────────────────┘
┌─id─┬─name───┬─age─┬─HaveMoney─┬─attrb─┬─────────create_time─┐
│ 4 │ 戴沐白 │ 23 │ 150000 │ 2 │ 1999-08-01 00:00:00 │
└────┴────────┴─────┴───────────┴───────┴─────────────────────┘
┌─id─┬─name──────────────────────────────────┬─age─┬─HaveMoney─┬─attrb─┬─────────create_time─┐
│ 7 │ 朱竹青ghostcatwith great attack power │ 22 │ 150000 │ 2 │ 2000-12-31 00:00:00 │
└────┴───────────────────────────────────────┴─────┴───────────┴───────┴─────────────────────┘
┌─id─┬─name─────┬─age─┬─HaveMoney─┬─attrb─┬─────────create_time─┐
│ 5 │ 宁荣rong │ 22 │ 150000 │ 2 │ 2000-12-01 00:00:00 │
└────┴──────────┴─────┴───────────┴───────┴─────────────────────┘
┌─id─┬─name────┬─age─┬─HaveMoney─┬─attrb─┬─────────create_time─┐
│ 3 │ tangsan │ 22 │ 200000 │ 2 │ 2000-08-01 00:00:00 │
└────┴─────────┴─────┴───────────┴───────┴─────────────────────┘
┌─id─┬─name──────┬─age─┬─HaveMoney─┬─attrb─┬─────────create_time─┐
│ 1 │ zengyanru │ 26 │ 300000 │ 1 │ 1995-08-26 13:23:52 │
│ 1 │ zhaoliang │ 27 │ 300000 │ 1 │ 1995-08-26 13:23:52 │
└────┴───────────┴─────┴───────────┴───────┴─────────────────────┘
┌─id─┬─name───┬─age─┬─HaveMoney─┬─attrb─┬─────────create_time─┐
│ 4 │ 奥斯卡 │ 23 │ 150000 │ 2 │ 1999-09-01 00:00:00 │
└────┴────────┴─────┴───────────┴───────┴─────────────────────┘
8 rows in set. Elapsed: 0.008 sec.
clickhouse自己按照时间的分区,没有合并,用optimize也没有合并。后续估计要重启才能合并了。
alter
加字段
alter table student add column `attrb` UInt32 after `HaveMoney`;
update
update比较特殊,是用alter来做的 ,这个和clickhouse列式设计有关,毕竟人家拿来做OLAP的,本来就假定改动不多。每次都是很heavy的操作
alter table student update attrb=1 where id=1;
结果:
ALTER TABLE student
UPDATE attrb = 1 WHERE id = 1
Query id: 9df3638d-09ee-46f5-a793-bcda051180ad
Ok.
0 rows in set. Elapsed: 0.009 sec.
aggregation
是clickhouse的长处,大量有用的函数供选择。原本行式存储我们印象中以为要很慢的,一想到列式存储,就发现很快。函数可以参考
count | ClickHouse Documentation
group by有几种模式可以选择,下面展示roll up(给定n个维度,会给你从左到右n个维度依次聚合一次,还有全部聚合一次)
如
select attrb, age, sum(HaveMoney) from student group by attrb,age with rollup;
结果
Query id: d1254ec4-2d65-4704-a6fc-ff2b3306daa2
┌─attrb─┬─age─┬─sum(HaveMoney)─┐
│ 1 │ 26 │ 300000 │
│ 2 │ 22 │ 650000 │
│ 1 │ 27 │ 300000 │
│ 2 │ 23 │ 300000 │
└───────┴─────┴────────────────┘
┌─attrb─┬─age─┬─sum(HaveMoney)─┐
│ 2 │ 0 │ 950000 │
│ 1 │ 0 │ 600000 │
└───────┴─────┴────────────────┘
┌─attrb─┬─age─┬─sum(HaveMoney)─┐
│ 0 │ 0 │ 1550000 │
└───────┴─────┴────────────────┘
7 rows in set. Elapsed: 0.008 sec.
其他聚合可以参考: