Clickhouse学习笔记(4)—— Clickhouse SQL

news2024/11/20 11:46:09

insert

insert操作和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 的一种;

具体语法:

Delete:ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr

Update:ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr

相关文档:

ALTER TABLE … DELETE Statement | ClickHouse Docs

ALTER TABLE … UPDATE Statements | ClickHouse Docs

从官方文档可以看出:

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

为什么说Mutation 语句是一种很“重”的操作?

t_order_smt表为例:

其中的数据如下:

data中的数据可以看出数据经过了一次合并:

在该表中进行删除操作:
alter table t_order_smt delete where sku_id ='sku_001';

虽然执行速度很快,但是可以看到多出来了两个数据文件:

这是因为Mutation 语句分两步执行,同步执行的部分其实只是进行新增数据、新增分区和并把旧分区打上逻辑上的失效标记;直到触发分区合并的时候,才会删除旧数据释放磁盘空间

因此每一次delete、update都意味着对于之前数据的复制,所以说是一种heavy operation

同时可以注意到,每进行一次mutation操作,都会产生一个mutation_num.txt文件,其中有对于此次mutation操作的详细记录:

而num的数值和数据文件的后缀相对应;

因为delete和update起初都是很”重“的操作,因此官方也提供了相对轻量级的操作:

但仅限于delete操作,详见官网:The Lightweight DELETE Statement | ClickHouse Docs

这里的delete操作语法和MySQL等OLTP数据库相同:

DELETE FROM [db.]table [ON CLUSTER cluster] WHERE expr

尝试一下效果:

当前表中的数据如下:

执行删除语句:delete from t_order_smt where sku_id = "sku_004";

发现并不支持,这是因为轻量级删除时v22.8版本才开放支持的功能

https://www.alibabacloud.com/help/zh/clickhouse/latest/new-features-overview

select

SELECT Query | ClickHouse Docs

查询操作和标准SQL语句差别不大:

1.支持子查询

2.支持 CTE(Common Table Expression 通用表表达式)

CTE是一种临时表,使用“WITH”命令,可以执行递归查询:

语法如下:

WITH
  cte1 AS (SELECT a, b FROM table1),
  cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a= cte2.c;

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

4.窗口函数(v21.3之后开放实验性窗口函数;目前已全面支持窗口函数)

Window Functions | ClickHouse Docs

5.不支持自定义函数

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

with rollup:从右至左去掉维度进行小计

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

with totals: 只计算合计

比如说group by a,b

with rollup:相当于group by a,bgroup by agroup by null

with cube:相当于group by a,bgroup by agroup by bgroup by null

with totals:相当于group by a,bgroup by null

group by 测试

插入数据:

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');

with rollup:

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

结果如下:

with cube:

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

with totals:

alter操作

新增字段 add column

alter table tableName add column newcolname String after col1;

可以指定新增字段的位置

修改字段 modify column

alter table tableName modify column newcolname String;

删除字段

alter table tableName drop column newcolname;

更多操作详见:Column Manipulations | ClickHouse Docs

数据导出

语法格式如下:

clickhouse-client --password=why666 --query "select * from t_order_mt where create_time='2020-06-01 12:00:00'" --format CSVWithNames> /home/why/data/ck1.csv

执行命令后可以看到相应的csv文件:

注意:因为clickhouse中的一般是宽表,导出数据的功能不常用

更多数据格式详见:Formats for Input and Output Data | ClickHouse Docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1195810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CodeWhisperer 史上最强大的 AI 编程助手!!

最近用了一个叫 CodeWhisperer 的插件,这个软件对于来说开发人员,插件有好多实用的功能,能有效减少我们的重复性工作,让编码更高效,代码质量也提升了很多。 CodeWhisperer 简介 CodeWhisperer 是亚⻢逊出品的一款基于…

GZ038 物联网应用开发赛题第3套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第3套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评…

C++---类的优化构造

首先,先介绍以下拷贝构造和构造的区别。 拷贝构造Date(Date& d)初始化:用一个实例对象去初始化一个未初始化的对象, 例:如果d1未被实例化,则Date d1 d2; 也会被编译器认为拷贝构造&#…

Springboot+vue的企业资产管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的企业资产管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的企业资产管理系统,采用M(model&a…

Shopee店铺支付方式有哪些? Shopee自养号测评提高产品曝光率的有效方法

Shopee作为一家领先的电子商务平台,如何优化你的Shopee店铺商品再结合自养号测评,并提高曝光率和销售能力,其中支付是至关重要一环之一。 虾皮为卖家提供了多种收款方式,包括在线支付、虚拟账户余额和线下支付。市场适应性也是卖…

2023最新版本 从零基础入门C++与QT(学习笔记) -2- 命名空间的使用

🎏在不同的命名空间变量名可相同 创建(如下方代码块) 🎄分析一下构成 🎈-1- namespace 关键字命名空间 🎈-2- wm9 空间名称 🎈-3-括号里边正常定义变量即可 namespace wm9 {int a 99;char b A;float c 9.99;char…

概念解析 | 认知战:21世纪的新战争形式

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:认知战 概念解析 | 认知战:21世纪的新战争形式 背景介绍 随着科技的飞速发展,信息技术深深渗透到各个领域,信息已经成为一种重要的战略资源。传统的战争形式主要依靠武力进攻,…

短视频矩阵seo系统源码搭建----技术定制化开发

一、需要遵循一下技术开发步骤: 1. 确定需求和功能:明确系统的主要目标和需要实现的功能,包括关键词研究、短视频制作、外链建设、数据分析、账号设置优化等方面。 2. 设计系统架构:根据需求和功能确定系统的架构,包…

【CCF-C解刊】4区逆袭到1区TOP,这本期刊实力强劲,34天录用,7天见刊!

计算机类 • 好刊解读 今天小编带来Elsevier旗下计算机领域好刊的解读,这本期刊从4区逆袭成为中科院1区(TOP),如此实力强劲的期刊,究竟如何? 如有相关领域作者有意向投稿,可作为重点关注&…

C++进阶-STL stack容器的简单认识

STL stack容器的简单认识 stack基本概念stack常用接口构造函数赋值操作数据存取大小操作 stack基本概念 stack是一种 先进后出 (First In Last out, FILO)的数据结构,它只有一个出口 栈只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈中进…

Error: “+“ and “-“ must be surrounded by whitespace in calculations.

加减之前一定要空格 改之前: 改之后: 然后就完美解决啦

2023美团外卖商超药店月销量

数据包含:外卖商超、药店商品月销量、含商品skuid、规格spuid等内容 资源下载 ​​​​​​​https://download.csdn.net/download/WANJIAWEN1002/88444367?spm1001.2014.3001.5503

金融服务行业如何面对精细化的大数据模式下日益增加的文件传输压力?

随着数字化转型的加速,金融机构需要在数据化基础上进行升级和转型,挖掘互联网数据传输与金融业深度融合的新形态,同时确定如何更好地存储、保护和分析数据。然而,在精细化的大数据模式下,金融机构也面临着日益增加的数…

地推网推必备app拉新平台 又升级啦 一手官签渠道

今天地推网推必备app拉新平台 ”聚量推客“ 又升级啦 一手邀请码 000000 今天升级了什么呢? 针对地推和网推作业人员升级了团队管理和做单excel导出功能,更好得查看自己和团队的作业情况,这个功能是地推和网推的一个必备功能

直播间自动评论神器的运行分享,与开发需要到的技术分析

先来看实操成果,↑↑需要的同学可看我名字↖↖↖↖↖,或评论888无偿分享 随着互联网的发展,直播带货越来越受欢迎。为了更好地服务观众,许多直播间开始使用自动回复机器人。本文将介绍直播间自动回复机器人需要用到的技术和流程。…

spring命名空间注入和XML自动装配、引入外部配置文件

Spring p命名空间注入util命名空间注入基于XML的自动装配根据名称自动装配 Spring引入外部属性配置文件 p命名空间注入 作用:简化配置。 使用p命名空间注入的前提条件包括两个: ● 第一:在XML头部信息中添加p命名空间的配置信息&#xff1a…

88.Linux系统下关于fork的经典练习

题目描述 下列程序输出几个A? 运行结果 输出6个A 根据代码段仔细执行,注意for循环的i的值即可得出答案 下列程序输出几个A? (这个printf后面是不带\n也就是说不刷新缓冲区) 运行结果 输出8个A,要注意到此程序的printf语句没有…

Python制作国旗头像

今天教大家用几行代码快速实现一个国庆风头像,效果是这样的 素材:一张头像、一张国旗图片 思路:将国旗图片的每个像素点的透明度从左至右,从上到下逐次递减后,将其盖在头像上面就形成了最终的效果图。 完整代码&…

个人app编程的好处及条件

1.概要 2.个人app编程目标 开发手机软件,类似微信、qq等软件应用,解决人们日常生活问题 例如: 1)你可以,自己开发一个网站,管理自己的日常生活照片,防止哪一天手机掉了或丢了,照片…

安装Node的包管理 工具Nvm之后,不能正确下载在所需要的node版本

使用命令行:nvm install 14.14.0 下面一直都是再运行中,没有任何反应 解决方法为: 增加nvm的下载镜像,一般使用淘宝的镜像 以下是在 Windows 上设置 NVM 下载镜像的步骤: 查看当前 NVM 配置: 在命令提示…