详解 ClickHouse 的 SQL 操作

传统关系型数据库(以 MySQL 为例)的 SQL 语句,ClickHouse 基本都支持

一、插入

sql 复制代码
--语法:
insert into table_name values(xxxxxx),(yyyyyyy),...;

insert into table_name select xxxxx from table_name2 where yyyyy;

二、更新和删除

作为 OLAP 数据库,ClickHouse 本身不太擅长更新和删除操作,它提供了 Delete 和 Update 的能力,不同于 OLTP 数据库的更新和删除操作,这类操作被称为 Mutation 查询,它可以看做 Alter 的一种。

sql 复制代码
--更新
alter table table_name update column=value where condition;

--删除
alter table table_name delete where condition;
  • Mutation 语句是一种很"重"的操作,而且不支持事务
  • ClickHouse 更新和删除的本质操作是将原有的分区重新创建一份并把更新或删除后的新数据写入,然后将原有分区打上逻辑上的失效标记,此时原有数据依然存储在磁盘,直到触发分区合并的时候,才会真正删除旧数据释放磁盘空间
  • 实际生产中不建议对 ClickHouse 的表数据进行更新和删除

三、查询

1. 基本查询

sql 复制代码
select columns from table_name where conditions group by column order by column;

--1. 支持子查询
select columns from (select columns from table_name where conditions);

--2. 支持 CTE(Common Table Expression 公用表表达式 with 子句)
with table_name2 as (
	select columns from table_name where conditions
)

select * from table_name2

2. 关联查询

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

3. 基本函数

sql 复制代码
--条件判断
if(condition, then, else) --条件值为非0则 then 否则 else
multiIf(cond1, then1, cond2, then2, ...., else) --类似于 case when then else end 函数

4. 多维分析函数

sql 复制代码
--with rollup:上卷
group by a,b with rollup --统计的维度组合为 (), a, (a,b)


--with cube:多维分析
group by a,b with cube --统计的维度组合为 (), a, b, (a,b)

--with totals:总计
group by a,b with totals --统计的维度组合为 (), (a,b)

四、alter 操作

sql 复制代码
--新增字段
alter table table_name add column col_name col_type after col_name1;

--修改字段类型
alter table table_name modify column col_name new_col_type;

--删除字段
alter table table_name drop column col_name;

五、导出数据

更多支持格式参照:https://clickhouse.tech/docs/en/interfaces/formats/

shell 复制代码
#将查询出的数据导出为 csv 文件
clickhouse-client --query "select * from t_order_mt where create_time='2020-06-01 12:00:00'" --format CSVWithNames > /opt/module/data/rs1.csv
相关推荐
鸽鸽程序猿5 分钟前
【Redis】事务
数据库·redis·缓存
码农小白猿26 分钟前
IACheck优化电梯定期检验报告:自动化术语审核提升合规性与效率
大数据·运维·人工智能·ai·自动化·iacheck
Knight_AL27 分钟前
MySQL 分区表应用案例:优化数据管理与性能
数据库·mysql
老华带你飞1 小时前
考试管理系统|基于java+ vue考试管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
九皇叔叔1 小时前
MySQL 数据库 MVCC 与锁如何联手解决脏读、不可重复读、幻读
数据库·mysql
URBBRGROUN4671 小时前
Spring AI @ToolParam 扩展注解改造实践
大数据·人工智能·spring
WZTTMoon1 小时前
Spring Boot OAuth2 授权码模式开发实战
大数据·数据库·spring boot
中科天工1 小时前
智能仓储解决方案到底是什么?
大数据·人工智能·智能
xl-xueling2 小时前
从快手直播故障,看全景式业务监控势在必行!
大数据·后端·网络安全·流式计算
AI题库2 小时前
PostgreSQL 18 从新手到大师:实战指南 - 1.1 PostgreSQL 18简介
数据库·postgresql