Clickhouse SQL语法
Insert
基本与标准 SQL(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 的一种。
虽然可以实现修改和删除,但是和一般的 OLTP 数据库不样,Mutation 语句是一种很“重”的操作,而且不支持事务。
“重”的原因主要是每次修改或者删除都会导致放弃目标数据原有分区,重建新分区。所以尽量做批量的变更,不要进行频繁小数据的操作
(1)删除操作
alter table t_order_smt delete where sku_id='sku_001';
(2)修改操作
alter table t_order_smt update total_amount=toDecimal32(2000.00,2) where id =102;
由于操作比较“重”,所以 Mutation 语句分两步执行,同步执行的部分其实只是进行新增数据新增分区和并把旧分区打上逻辑上的失效标记。直到触发分区合并的时候,才会删除旧数据释放磁盘空间,一般不会开放这样的功能给用户,由管理员完成。
如何做到高性能update和delete
更新:新增version列,插入一条新数据,version+1,每次查询查version最大的
删除:新增sing列,0表示未删除,1表示已删除,version+1,每次查询添加过滤条件,where sing = 0 and version最大
时间久了,数据会膨胀,过期数据可以定期删除
查询
ClickHouse 基本上与标准 SQL 差别不大
1) 支持子查询
2) 支持 CTE(Common Table Expression 公用表表达式 with 子句)
3) 支持各种 JOIN,但是 JOIN 操作无法使用缓存,所以即使是两次相同的 JOIN 语句,
4) ClickHouse 也会视为两条新 SQL
5) 窗口函数
6) 不支持自定义函数
7) GROUP BY 操作增加了 with rollup\with cube\with total 用来计算小计和总计。
rollup:上卷
cube:多维分析
total:总计
(1)插入数据
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');
(2)with rollup:从右至左去掉维度进行小计([id,sku_id]、[id]、[])
select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with rollup;
SELECT
id,
sku_id,
sum(total_amount)
FROM t_order_mt
GROUP BY
id,
sku_id
WITH ROLLUP
Query id: d210cbc1-3614-43f8-8be9-178dfec5601a
┌──id─┬─sku_id──┬─sum(total_amount)─┐
│ 110 │ sku_003 │ 600 │
│ 109 │ sku_002 │ 2000 │
│ 107 │ sku_002 │ 2000 │
│ 106 │ sku_001 │ 1000 │
│ 104 │ sku_002 │ 2000 │
│ 101 │ sku_002 │ 2000 │
│ 103 │ sku_004 │ 2500 │
│ 108 │ sku_004 │ 2500 │
│ 105 │ sku_003 │ 600 │
│ 101 │ sku_001 │ 1000 │
└─────┴─────────┴───────────────────┘
┌──id─┬─sku_id─┬─sum(total_amount)─┐
│ 110 │ │ 600 │
│ 106 │ │ 1000 │
│ 105 │ │ 600 │
│ 109 │ │ 2000 │
│ 107 │ │ 2000 │
│ 104 │ │ 2000 │
│ 103 │ │ 2500 │
│ 108 │ │ 2500 │
│ 101 │ │ 3000 │
└─────┴────────┴───────────────────┘
┌─id─┬─sku_id─┬─sum(total_amount)─┐
│ 0 │ │ 16200 │
└────┴────────┴───────────────────┘
20 rows in set. Elapsed: 0.090 sec.
3)with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计([id,sku_id]、[id]、[sku_id]、[])
43d457bfa2ca :) select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with cube;
SELECT
id,
sku_id,
sum(total_amount)
FROM t_order_mt
GROUP BY
id,
sku_id
WITH CUBE
Query id: 189f048c-12d9-456d-a2df-62794e91eeea
┌──id─┬─sku_id──┬─sum(total_amount)─┐
│ 110 │ sku_003 │ 600 │
│ 109 │ sku_002 │ 2000 │
│ 107 │ sku_002 │ 2000 │
│ 106 │ sku_001 │ 1000 │
│ 104 │ sku_002 │ 2000 │
│ 101 │ sku_002 │ 2000 │
│ 103 │ sku_004 │ 2500 │
│ 108 │ sku_004 │ 2500 │
│ 105 │ sku_003 │ 600 │
│ 101 │ sku_001 │ 1000 │
└─────┴─────────┴───────────────────┘
┌──id─┬─sku_id─┬─sum(total_amount)─┐
│ 110 │ │ 600 │
│ 106 │ │ 1000 │
│ 105 │ │ 600 │
│ 109 │ │ 2000 │
│ 107 │ │ 2000 │
│ 104 │ │ 2000 │
│ 103 │ │ 2500 │
│ 108 │ │ 2500 │
│ 101 │ │ 3000 │
└─────┴────────┴───────────────────┘
┌─id─┬─sku_id──┬─sum(total_amount)─┐
│ 0 │ sku_003 │ 1200 │
│ 0 │ sku_004 │ 5000 │
│ 0 │ sku_001 │ 2000 │
│ 0 │ sku_002 │ 8000 │
└────┴─────────┴───────────────────┘
┌─id─┬─sku_id─┬─sum(total_amount)─┐
│ 0 │ │ 16200 │
└────┴────────┴───────────────────┘
24 rows in set. Elapsed: 0.224 sec.
4)with totals: 只计算合计([id,sku_id]、[])
43d457bfa2ca :) select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with totals;
SELECT
id,
sku_id,
sum(total_amount)
FROM t_order_mt
GROUP BY
id,
sku_id
WITH TOTALS
Query id: f8b77dd4-cad5-4b7c-9777-651383617284
┌──id─┬─sku_id──┬─sum(total_amount)─┐
│ 110 │ sku_003 │ 600 │
│ 109 │ sku_002 │ 2000 │
│ 107 │ sku_002 │ 2000 │
│ 106 │ sku_001 │ 1000 │
│ 104 │ sku_002 │ 2000 │
│ 101 │ sku_002 │ 2000 │
│ 103 │ sku_004 │ 2500 │
│ 108 │ sku_004 │ 2500 │
│ 105 │ sku_003 │ 600 │
│ 101 │ sku_001 │ 1000 │
└─────┴─────────┴───────────────────┘
Totals:
┌─id─┬─sku_id─┬─sum(total_amount)─┐
│ 0 │ │ 16200 │
└────┴────────┴───────────────────┘
10 rows in set. Elapsed: 0.062 sec.
alter操作
1)新增字段
alter table tableName add column newcolname String after col1;
43d457bfa2ca :) alter table t_order_mt add column order_name String after create_time;
ALTER TABLE t_order_mt
ADD COLUMN `order_name` String AFTER create_time
Query id: d1f81cf5-ed3e-412a-b9ad-d78012b7d446
Ok.
0 rows in set. Elapsed: 0.149 sec.
43d457bfa2ca :) desc t_order_mt;
DESCRIBE TABLE t_order_mt
Query id: 5223eda7-795d-4c54-b0e6-eb9b7dfe550d
┌─name─────────┬─type───────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ id │ UInt32 │ │ │ │ │ │
│ sku_id │ String │ │ │ │ │ │
│ total_amount │ Decimal(16, 2) │ │ │ │ │ │
│ create_time │ DateTime │ │ │ │ │ │
│ order_name │ String │ │ │ │ │ │
└──────────────┴────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
5 rows in set. Elapsed: 0.001 sec.
- 修改字段
alter table tableName modify column newcolname String;
- 删除字段
alter table tableName drop column newcolname;
导出数据
root@43d457bfa2ca:/# touch data.csv
root@43d457bfa2ca:/# clickhouse-client --password --query "select * from t_order_mt where create_time='2020-06-01 12:00:00'" --format CSVWithNames > data.csv
root@43d457bfa2ca:/# cat data.csv
"id","sku_id","total_amount","create_time","order_name"
101,"sku_001",1000,"2020-06-01 12:00:00",""
101,"sku_002",2000,"2020-06-01 12:00:00",""
103,"sku_004",2500,"2020-06-01 12:00:00",""
104,"sku_002",2000,"2020-06-01 12:00:00",""
110,"sku_003",600,"2020-06-01 12:00:00",""
Clickhouse SQL语法的更多相关文章
- 值得注意的ibatis动态sql语法格式
一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- SQL 语法总结
学了一个月的java,开始有入门的感觉.这段时间接触到了java的JDBC, 发现学习这部分的内容还是要有SQL的基础,于是花费了几天时间学习了一下SQL语法,并将其总结于下. 选择数据 SELECT ...
- SQL语法和运算符(一)
一个数据库通常包含一个或多个表.每个表由一个名字标识,表包含带有数据的记录(行). 一些最重要的SQL命令(SQL对大小写不敏感): 一.SQL语法 select:从数据库中提取数据 update:更 ...
- [转]MySQL 最基本的SQL语法/语句
MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下. DDL-数据定义语言(Create,Alter,Drop,DECLARE) DML-数据操纵语言(Select,Delete ...
- SQL语法整理
SQL是Structured Query Language的缩写,中文全名为结构化查询语言,是一种用于数据存储,查询,更新和管理的关系数据库系统. SQL语法 创建表 create table tab ...
- ORACLE分页查询SQL语法——最高效的分页
--1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ...
- [Android新手区] SQLite 操作详解--SQL语法
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
- 有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎
有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎 presto,hive,drill,calcite,sparksq
- editplus的配置文件来支持sql语法高亮【转】
editplus默认是没有sql语法高亮的,原因是它的内部没有sql.stx的这样一个语法文件 我们自己在 EditPlus 的安装目录下面新建一个文件名为sql.stx,然后打开editplus ...
随机推荐
- MYSQL——mysql检索不包含字母U的数据
2024/07/09 1. NOT LIKE 2. IS NOT.<>.!= 3. NOT IN 如题,正确答案如下: SELECT * FROM your_table_name WHER ...
- 动物园 (APIO 2007) 状压DP
动物园 \([APIO \ 2007]\) · 题意: 新建的圆形动物园是亚太地区的骄傲.圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物.如下图所示: 你是动物园的公关主管. ...
- 低版本安卓home assistant网页浏览器
试了很久 一直有问题的一点 , 使用普通浏览器加载不出来登录界面 只能加载出icon 然后就没反应了 考虑到了webview的问题 但是没想到安卓5.0之前是固定且不可升级的webview 从 And ...
- C# 导出Excel NPOI 修改指定单元格的样式 或者行样式
参考文章:原文链接:https://blog.csdn.net/chensirbbk/article/details/52189985 #region 2.NPOI读取Excel 验证Excel数据的 ...
- Windows 安装 OpenSSH
使用命令行安装 安装 OpenSSH 服务端和客户端 在管理员终端下运行以下命令: # 检查 OpenSSH 可用性 Get-WindowsCapability -Online | Where-Obj ...
- 一个.NET开源、免费的跨平台物联网网关
前言 今天大姚给大家分享一个基于.NET开源.免费的跨平台物联网网关:IoTGateway. 项目介绍 IoTGateway是一个基于.NET6的跨平台物联网网关.通过可视化配置,轻松的连接到你的任何 ...
- python get 请求接口 忽略证书验证
import requests # 请求接口 import ssl context = ssl.create_default_context() context.check_hostname = Fa ...
- C#自定义控件—流动管道
C#用户控件之流动管道 如何绘制一个动态的流动管道(FlowPipe)? 分两步绘制 定义属性: 画布重绘: 主要技能: 管道的绘制(渐变色矩形) /// <summary> /// 画渐 ...
- Redis 入门 - C#|.NET Core客户端库六种选择
经过前面的Redis基础学习,今天正式进入编码阶段了,进入编码阶段我们又同样面临一道多选题,选择什么客户端库?要是有选择困难症的又要头疼了.不过别担心我先头疼,今天就给大家介绍6款.NET系Redis ...
- BOM – 操作 Query
前言 ASP.NET Core 写过一篇关于操作 query 的 ASP.NET Core – 操作 Uri 和 Query. 前端偶尔也会需要做出 query. URLSearchParams 之前 ...