暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

clickhouse SQL操作

Ty3306 2022-12-29
492

SQL操作
基本上来说传统关系型数据库(以MySQL为例)的SQL语句,基本支持但是也有不一样的地方。这里不会从头讲解SQL语法只介绍Clickhouse与标准SQL(MySQL)不一致的地方。

1.insert
基本与标准SQL(MySQL)基本一致

包括标准 insert into [table_name] values(…),(….)

以及从表到表的插入

insert into [table_name] select a,b,c from [table_name_2]

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

虽然可以实现修改和删除,但是和一般的OLTP数据库不一样,Mutation语句是一种很“重”的操作,而且不支持事务。

“重”的原因主要是每次修改或者删除都会导致放弃目标数据的原有分区,重建新分区。所以尽量做批量的变更,不要进行频繁小数据的操作。

删除操作

alter table t_order_smt delete where sku_id ='sku_001';

修改操作

alter table t_order_smt
update total_amount=toDecimal32(2000.00,2) where id =102;
1
2
由于操作比较“重”,所以 Mutation语句分两步执行,同步执行的部分其实只是进行新增数据新增分区和并把旧分区打上逻辑上的失效标记。直到触发分区合并的时候,才会删除旧数据释放磁盘空间。

3.查询操作
clickhouse基本上与标准SQL 差别不大。

支持子查询

支持CTE(with 子句)

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

不支持窗口函数。

不支持自定义函数。

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

模拟数据

insert into t_order_mt
values(101,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(102,'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')

select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with rollup;
with rollup : 从右至左去掉维度进行小计。

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

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

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

with totals: 只计算合计。

4.alter操作
同mysql的修改字段基本一致。

新增字段

alter table tableName add column newcolname String after col1

修改字段类型

alter table tableName modify column newcolname String ;

删除字段

alter table tableName drop column newcolname ;

5.导出数据
"select toHour(create_time) hr ,count(*) from test1.order_wide where dt='2020-06-23' group by hr" --format CSVWithNames> ~/rs1.csv





原文链接:https://blog.csdn.net/weixin_45596022/article/details/115358757

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论