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 ...
随机推荐
- CH05_数组
CH05_数组 概述 定义:一组相同类型的数据的集合. 描述: 1.数组中的每个元素都是相同的数据类型 2.数组是由连续的内存位置组成的. 3.数组索引是从0开始 一维数组 语法: 1.数据类型 数组 ...
- 用whl文件安装Anaconda中的GDAL
本文介绍在Anaconda环境下,基于.whl文件安装Python中高级地理数据处理库GDAL的方法. 在之前的文章中,我们介绍了基于conda install命令直接联网安装GDAL库的方法 ...
- Antd-React-TreeSelect前端搜索过滤
在开发过程中,但是antd中的搜索会把多余的也会带出来 就例如下图,我们本想去搜索1但是他会把其子节点都带出来,其实我们的本意是像搜2一样或者当中间隔层处理 但是我们该如何解决这样的问题呢如何做到下面 ...
- Python 潮流周刊#66:Python 的预处理器(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 使用 AWS CLI 管理 S3
S3 是 AWS 的对象存储服务 S3: Simple Storage Service 创建桶 使用 aws s3 mb 命令创建新的 S3 桶.您需要提供一个全球唯一的桶名称和创建桶的区域. aws ...
- seata 下载及安装
分布式事务 参考文章: 分布式事务实战方案汇总 https://www.cnblogs.com/yizhiamumu/p/16625677.html 分布式事务原理及解决方案案例https://www ...
- Goby漏洞发布 | CVE-2024-38856 Apache OFbiz /ProgramExport 命令执行漏洞【已复现】
漏洞名称:Apache OFbiz /ProgramExport 命令执行漏洞(CVE-2024-38856) English Name:Apache OFbiz /ProgramExport Com ...
- 网络服务性能优化:Wrktcp与Perf工具详解
wrktcp安装 码云地址:https://gitee.com/icesky1stm/wrktcp 直接下载,cd wrktcp-master && make,会生成wrktcp,就o ...
- 十五,Spring Boot 整合连接数据库(详细配置)
十五,Spring Boot 整合连接数据库(详细配置) @ 目录 十五,Spring Boot 整合连接数据库(详细配置) 最后: JDBC + HikariDataSource(Spring Bo ...
- 从零开始搭建一个LoRaWAN基站
先说两句 SX1301/SX1302是semtech公司推出的基站端射频基带芯片,其与SX127x/SX126x的主要区别在于: 只是个基带芯片,使用时需要加射频前端(SX125x/SAW/...) ...