clickhouse初体验之create insert update select group by

目录

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MySQL中,UPDATE语句与GROUP BY子句结合使用是一种常见的操作。然而,MySQL不直接支持在UPDATE语句中使用GROUP BY子句。如果你想对GROUP BY的结果进行更新,你可以使用子查询或临时表的方式来实现。 一种方法是使用子查询。你可以首先编写一个包含GROUP BY子句的SELECT语句,将结果保存在一个临时表中,然后使用UPDATE语句来更新这个临时表。例如: ``` UPDATE table_name SET column_name = 'new_value' WHERE primary_key IN ( SELECT primary_key FROM table_name GROUP BY group_column HAVING condition ) ``` 另一种方法是使用临时表。你可以先创建一个临时表,将GROUP BY的结果插入到这个临时表中,然后使用UPDATE语句来更新这个临时表。例如: ``` CREATE TEMPORARY TABLE temp_table SELECT group_column, MAX(column_name) AS max_value FROM table_name GROUP BY group_column; UPDATE table_name JOIN temp_table ON table_name.group_column = temp_table.group_column SET table_name.column_name = temp_table.max_value; DROP TEMPORARY TABLE temp_table; ``` 需要注意的是,根据MySQL的行为,GROUP BY子句先于ORDER BY子句执行。因此,在UPDATE语句中使用GROUP BY时,不需要指定ORDER BY子句。同时,如果GROUP BY的结果只有一条记录,那么ORDER BY子句将无效。 请根据你的具体需求选择适合的方法来实现GROUP BY和UPDATE的组合操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [一个MySQL中两表联合update的例子(并带有group by分组)](https://blog.csdn.net/albjxn4742/article/details/102066339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SQL Group By和Update表别名 查找数据冲突](https://blog.csdn.net/qqqgg/article/details/78061173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [深入解析mysql中order by与group by的顺序问题](https://download.csdn.net/download/weixin_38562329/13692932)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值