Clickhouse学习笔记(4)—— Clickhouse SQL

insert

insert操作和mysql一致

  1. 标准语法:insert into [table_name] values(...),(....)
  2. 从表到表的插入:insert into [table_name] select a,b,c from [table_name_2]

update 和 delete

ClickHouse 提供了 Delete 和 Update 的能力,这类操作被称为 Mutation 查询 ,它可以看做 Alter 的一种;

具体语法:

Delete:ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr

Update:ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr

相关文档:

ALTER TABLE ... DELETE Statement | ClickHouse Docs

ALTER TABLE ... UPDATE Statements | ClickHouse Docs

从官方文档可以看出:

虽然可以实现修改和删除,但是和一般的 OLTP 数据库不一样,Mutation 语句是一种很"重"的操作 ,而且不支持事务,不建议经常使用

为什么说Mutation 语句是一种很"重"的操作?

以t_order_smt表为例:

其中的数据如下:

data中的数据可以看出数据经过了一次合并:

在该表中进行删除操作:
alter table t_order_smt delete where sku_id ='sku_001';

虽然执行速度很快,但是可以看到多出来了两个数据文件:

这是因为Mutation 语句分两步执行,同步执行的部分其实只是进行新增数据、新增分区和并把旧分区打上逻辑上的失效标记;直到触发分区合并的时候,才会删除旧数据释放磁盘空间

因此每一次delete、update都意味着对于之前数据的复制,所以说是一种heavy operation

同时可以注意到,每进行一次mutation操作,都会产生一个mutation_num.txt文件,其中有对于此次mutation操作的详细记录:

而num的数值和数据文件的后缀相对应;

因为delete和update起初都是很"重"的操作,因此官方也提供了相对轻量级的操作:

但仅限于delete操作,详见官网:The Lightweight DELETE Statement | ClickHouse Docs

这里的delete操作语法和MySQL等OLTP数据库相同:

DELETE FROM [db.]table [ON CLUSTER cluster] WHERE expr

尝试一下效果:

当前表中的数据如下:

执行删除语句:delete from t_order_smt where sku_id = "sku_004";

发现并不支持,这是因为轻量级删除时v22.8版本才开放支持的功能

https://www.alibabacloud.com/help/zh/clickhouse/latest/new-features-overview

select

SELECT Query | ClickHouse Docs

查询操作和标准SQL语句差别不大:

1.支持子查询

2.支持 CTE(Common Table Expression 通用表表达式)

CTE是一种临时表,使用"WITH"命令,可以执行递归查询:

语法如下:

sql 复制代码
WITH
  cte1 AS (SELECT a, b FROM table1),
  cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a= cte2.c;

3.支持各种 JOIN,但是 JOIN 操作无法使用缓存,所以即使是两次相同的 JOIN 语句,ClickHouse 也会视为两条新 SQL

4.窗口函数(v21.3之后开放实验性窗口函数;目前已全面支持窗口函数)

Window Functions | ClickHouse Docs

5.不支持自定义函数

6.GROUP BY 操作增加了with rollup\with cube\with total用来计算小计和总计

with rollup:从右至左去掉维度进行小计

with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计

with totals: 只计算合计

比如说group by a,b

with rollup:相当于group by a,b,group by a,group by null

with cube:相当于group by a,b,group by a,group by b,group by null

with totals:相当于group by a,b,group by null

group by 测试

插入数据:

sql 复制代码
alter table t_order_mt delete where 1=1;

insert into t_order_mt values\
(101,'sku_001',1000.00,'2020-06-01 12:00:00'),\
(101,'sku_002',2000.00,'2020-06-01 12:00:00'),\
(103,'sku_004',2500.00,'2020-06-01 12:00:00'),\
(104,'sku_002',2000.00,'2020-06-01 12:00:00'),\
(105,'sku_003',600.00,'2020-06-02 12:00:00'),\
(106,'sku_001',1000.00,'2020-06-04 12:00:00'),\
(107,'sku_002',2000.00,'2020-06-04 12:00:00'),\
(108,'sku_004',2500.00,'2020-06-04 12:00:00'),\
(109,'sku_002',2000.00,'2020-06-04 12:00:00'),\
(110,'sku_003',600.00,'2020-06-01 12:00:00');

with rollup:

select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with rollup;

结果如下:

with cube:

select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with cube;

with totals:

alter操作

新增字段 add column

alter table tableName add column newcolname String after col1;

可以指定新增字段的位置

修改字段 modify column

alter table tableName modify column newcolname String;

删除字段

alter table tableName drop column newcolname;

更多操作详见:Column Manipulations | ClickHouse Docs

数据导出

语法格式如下:

复制代码
clickhouse-client --password=why666 --query "select * from t_order_mt where create_time='2020-06-01 12:00:00'" --format CSVWithNames> /home/why/data/ck1.csv

执行命令后可以看到相应的csv文件:

注意:因为clickhouse中的一般是宽表,导出数据的功能不常用

更多数据格式详见:Formats for Input and Output Data | ClickHouse Docs

相关推荐
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
一隅论数智5 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
千里马学框架5 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台5 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone5 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
尧炎科技5 天前
防潮抗变形,就选纯品梅花全桉多层板
大数据
致远ccc5 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
程序员大阳5 天前
副队长大数据教程(5)--集群情况下虚拟机网络配置
大数据·集群·nat·网路
自由能燃气设备5 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远5 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程