clickhouse初体验之create insert update select group by

本文介绍了ClickHouse的安装、基本操作,包括创建表、插入数据、更新数据和聚合查询。示例展示了如何使用CREATE TABLE创建表,INSERT INTO插入记录,ALTER TABLE更新列,以及利用AGGREGATION函数进行数据聚合。此外,还提到了ClickHouse在OLAP场景下的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

create

Insert

alter

update

aggregation


安装之流直接略过,就是下载四个包然后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. 

其他聚合可以参考:

GROUP BY | ClickHouse Documentation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值