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.
  1. 修改字段
alter table tableName modify column newcolname String;
  1. 删除字段
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语法的更多相关文章

  1. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

  2. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  3. SQL 语法总结

    学了一个月的java,开始有入门的感觉.这段时间接触到了java的JDBC, 发现学习这部分的内容还是要有SQL的基础,于是花费了几天时间学习了一下SQL语法,并将其总结于下. 选择数据 SELECT ...

  4. SQL语法和运算符(一)

    一个数据库通常包含一个或多个表.每个表由一个名字标识,表包含带有数据的记录(行). 一些最重要的SQL命令(SQL对大小写不敏感): 一.SQL语法 select:从数据库中提取数据 update:更 ...

  5. [转]MySQL 最基本的SQL语法/语句

    MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下.   DDL-数据定义语言(Create,Alter,Drop,DECLARE) DML-数据操纵语言(Select,Delete ...

  6. SQL语法整理

    SQL是Structured Query Language的缩写,中文全名为结构化查询语言,是一种用于数据存储,查询,更新和管理的关系数据库系统. SQL语法 创建表 create table tab ...

  7. ORACLE分页查询SQL语法——最高效的分页

    --1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT  ...

  8. [Android新手区] SQLite 操作详解--SQL语法

    该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...

  9. 有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎

    有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎 presto,hive,drill,calcite,sparksq

  10. editplus的配置文件来支持sql语法高亮【转】

      editplus默认是没有sql语法高亮的,原因是它的内部没有sql.stx的这样一个语法文件 我们自己在 EditPlus 的安装目录下面新建一个文件名为sql.stx,然后打开editplus ...

随机推荐

  1. 远程采集服务器指标信息(一) 远程通过SSH执行命令

    远程采集服务器信息,比如说磁盘信息.内存信息. 现介绍java通过SSH执行命令采集服务器信息,比如说执行df.ls.top. /** * * SSH远程执行shell类 */ public clas ...

  2. Linux内核如何访问另外一个模块的函数和变量 原创

    一.问题整理 内核中两个模块,一个A,一个B,A模块中有操作函数,B模块要调用A模块的函数. 二.分析 这是一个驱动工程师经常遇到的一个问题,该问题其实是模块符号导出问题,实现该功能比较简单,借助EX ...

  3. B2B进销存ERP后台管理系统的逻辑架构与设计,AxureRP原型产品经理实战案例

    模块分析: 进销存系统是一种用于企业管理库存.销售和采购活动的信息系统.它的主要作用包括但不限于以下几个方面: 1.库存管理 实时库存跟踪:准确记录每种商品的库存数量,确保数据的实时性和准确性. 库存 ...

  4. [rCore学习笔记 025]分时多任务系统与抢占式调度

    写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 本节重 ...

  5. 实用接地气的 .NET 微服务框架

    前言 微服务架构已经成为搭建高效.可扩展系统的关键技术之一,然而,现有许多微服务框架往往过于复杂,使得我们普通开发者难以快速上手并体验到微服务带了的便利.为了解决这一问题,于是作者精心打造了一款最接地 ...

  6. C++ vector 访问元素用 at 和 [] 有什么区别?

    C++ vector 访问元素用 at and [] 有什么区别? 前言: 最近同事开发过程遇到了一个奇怪的coredump问题,崩溃位置和提交改动没有任何关系,看了几小时后来才发现原来是vector ...

  7. Mmdetection dataset pipline

    数据的加载顺序是上图(来自mmdetection官网)中的顺序进行,上图中只有一次padding,但是其实dataloader一共有两次padding,一次是pad,另外一次就是collect后,给模 ...

  8. Angular 18+ 高级教程 – Coding Style Guide 编码风格

    前言 Angular 从 v14 开始大改特改,改最多的就是编码风格. 以前是 class first,Decorator first,mutable first. 现在变成了 function fi ...

  9. 三,MyBatis-Plus 的各种查询的“超详细说明”,比如(等值查询,范围查询,模糊查询...)

    三,MyBatis-Plus 的各种查询的"超详细说明",比如(等值查询,范围查询,模糊查询...) @ 目录 三,MyBatis-Plus 的各种查询的"超详细说明&q ...

  10. 【赵渝强老师】Kafka的消息持久化

    1.Kafka消息持久性概述 Kakfa依赖文件系统来存储和缓存消息.对于硬盘的传统观念是硬盘总是很慢,基于文件系统的架构能否提供优异的性能?实际上硬盘的快慢完全取决于使用方式.同时 Kafka 基于 ...