当前位置: 首页 > news >正文

ClickHouse介绍和使用

ClickHouse介绍和使用

  • 1. 简介
  • 2. ClickHouse特点
  • 3. 数据类型
    • 3.1. 整型
    • 3.2. 浮点型
    • 3.3. Decimal型
    • 3.4. 布尔型
    • 3.5. 字符串
    • 3.6. 枚举类型
    • 3.7. 时间类型
  • 4. 表引擎
    • 4.1. TinyLog
    • 4.2. Memory
    • 4.3. MergeTree
      • 4.3.1. partition by分区(可选)
      • 4.3.2. primary key 主键(可选)
      • 4.3.3. order by(必选)
      • 4.3.4. 二级索引
      • 4.3.5. 数据 TTL
    • 4.4. ReplacingMergeTree
    • 4.5. SummingMergeTree
  • 5. SQL 操作
    • 5.1. select
    • 5.2. insert
    • 5.3. update 和 delete
    • 5.4. alter

在这里插入图片描述
官网:https://clickhouse.com/
测试平台:https://play.clickhouse.com/play?user=play

1. 简介

ClickHouse 是俄罗斯搜索巨头 Yandex 公司早 2016年 开源的一个极具 " 战斗力 " 的实时数据分析数据库,开发语言为C++
是一个用于联机分析 (OLAP:Online Analytical Processing) 的列式数据库管理系统(DBMS:Database Management System),简称 CK
工作速度比传统方法快100-1000倍,ClickHouse 的性能超过了目前市场上可比的面向列的DBMS。每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。

2. ClickHouse特点

列式存储

几乎覆盖了标准SQL 的大部分语法,包括 DDL 和 DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复。

多样化引擎

高吞吐写入能力

官方公开 benchmark 测试显示能够达到 50MB-200MB/s 的写入吞吐能力,按照每行100Byte 估算,大约相当于 50W-200W 条/s 的写入速度

数据分区与线程级并行

ClickHouse 将数据划分为多个 partition,每个 partition 再进一步划分为多个 index granularity(索引粒度),然后通过多个 CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条 Query 就能利用整机所有 CPU。极致的并行处理能力,极大的降低了查询延时。所以,ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多 cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务,ClickHouse 并不是强项。

3. 数据类型

3.1. 整型

有符号

Int8、Int16、Int32、Int64、Int128、Int256

无符号

UInt8、UInt16、UInt32、UInt64、UInt128、UInt256

3.2. 浮点型

float32、float64

3.3. Decimal型

Decimal()、Decimal32()、Decimal64()、Decimal128()

3.4. 布尔型

可以使用 UInt8 类型,取值限制为 0 或 1

3.5. 字符串

StringFixedString(N)

3.6. 枚举类型

Enum8、Enum16

3.7. 时间类型

Date、DateTime、DateTime64

4. 表引擎

  • 数据的存储方式和位置。
  • 支持哪些查询操作以及如何支持。
  • 数据的并发访问。
  • 数据索引的使用。
  • 是否可以支持多线程请求。
  • 是否可以支持数据复制。

4.1. TinyLog

以列文件的形式保存在磁盘上,不支持索引,没有并发控制。一般保存少量数据的小表,生产环境上作用有限。可以用于平时测试用。

create table t_tinylog ( id String, name String) engine=TinyLog;

4.2. Memory

Memory 表引擎直接将数据保存在内存中,数据即不会被压缩也不会被格式转换,因为基于内存,所以服务重启后会丢失。

4.3. MergeTree

该系列引擎是执行高负载任务的最通用和最强大的表引擎,它们的特点是可以快速插入数据以及进行后续的数据处理。支持索引和分区,地位可以相当于 innodb 之于 Mysql。而且基于 MergeTree,还衍生出很多其他引擎

4.3.1. partition by分区(可选)

作用
分区的目的主要是降低扫描的范围,优化查询速度
如果不填
所有数据都存放到名为all的数据分区
分区目录
MergeTree 是以列文件+索引文件+表定义文件组成的,但是如果设定了分区那么这些文件就会保存到不同的分区目录中
并行
分区后,面对涉及跨分区的查询统计,ClickHouse 会以分区为单位并行处理。
数据写入与分区合并
任何一个批次的数据写入都会产生一个临时分区,不会纳入任何一个已有的分区。写入后的某个时刻(大概 10-15 分钟后),ClickHouse 会自动执行合并操作(等不及也可以手动通过 optimize 执行),把临时分区的数据,合并到已有分区中。

optimize table xxxx final;

在这里插入图片描述

4.3.2. primary key 主键(可选)

主键特点

  • ClickHouse 中的 MergeTree 默认是
    8192。官方不建议修改这个值,除非该列存在大量重复值,比如在一个分区中几万行才有一个不同数据。
  • 索引字段不会全部存储,而是隔一段距离记录一个,查询时先找到一个区间,然后再去表中查具体位置
  • 数据量小,可以指定间隔,间隔默认是8192,索引树不会存储每个索引字段,

图片

  • 可以重复
  • 稀疏索引
  • 索引粒度

4.3.3. order by(必选)

order by 设定了分区内的数据按照哪些字段顺序进行有序保存。
order by 是 MergeTree 中唯一一个必填项,甚至比 primary key 还重要,因为当用户不设置主键的情况,很多处理会依照order by 的字段进行处理(比如后面会讲的去重和汇总)。
要求:主键必须是 order by 字段的前缀字段
比如 order by 字段是 (id,sku_id),那么主键必须是 id

4.3.4. 二级索引

能够为非主键字段设置二级索引

4.3.5. 数据 TTL

列级TTL

建立带有TTL列的表,这里定义total_amount 这一列的数据30s后结束生命周期

create table t_order_mt3(
id UInt32,
sku_id String,
total_amount Decimal(16,2)  TTL create_time + interval 30 SECOND,
create_time  Datetime
) engine =MergeTree
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id, sku_id);

表级TTL

可以在MergeTree的表参数中增加TTL表达式 为整张表设置TTL

create table stu(
id Int32,
name String,
create_time DateTime
)engine = MergeTree
partition by toYYYYMM(create_time)
order by id TTL create_time + interval 30  SECOND DELETE ;

4.4. ReplacingMergeTree

ReplacingMergeTree 是 MergeTree 的一个变种,它存储特性完全继承 MergeTree,只是多了一个去重的功能。尽管 MergeTree 可以设置主键,但是 primary key 其实没有唯一约束的功能。如果你想处理掉重复的数据,可以借助这个 ReplacingMergeTree。

去重时机
数据的去重只会在分区合并的过程中进行

去重范围
如果表经过了分区,去重只会在分区内部进行去重,不能执行跨分区的去重。
所以 ReplacingMergeTree 能力有限, ReplacingMergeTree 适用于在后台清除重复的数据以节省空间,但是它不保证没有重复的数据出现。
ReplacingMergeTree() 填入的参数为版本字段,重复数据保留版本字段值最大的。如果不填版本字段,默认按照插入顺序保留最后一条。

CREATE TABLE t_order_rmt (
id UInt32,
sku_id String,
total_amount DECIMAL ( 16, 2 ),
create_time DATETIME
) ENGINE = ReplacingMergeTree ( create_time )
PARTITION BY toYYYYMMDD ( create_time )
PRIMARY KEY ( id )
ORDER BY ( id, sku_id );

4.5. SummingMergeTree

对于不查询明细,只关心以维度进行汇总聚合结果的场景。如果只使用普通的MergeTree的话,无论是存储空间的开销,还是查询时临时聚合的开销都比较大。ClickHouse 为了这种场景,提供了一种能够“预聚合”的引擎 SummingMergeTree
以 SummingMergeTree()中指定的列作为汇总数据列
以 order by 的列为准,作为维度列
不在一个分区的数据不会被聚合
其他的列按插入顺序保留第一行
对于没来得及合并分区的临时数据,还是需要使用 sum(total_amount) 进行聚合

create table t_order_smt(
id UInt32,
sku_id String,
total_amount Decimal(16,2),
create_time Datetime
) engine = SummingMergeTree(total_amount)
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id );

5. SQL 操作

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

5.1. select

ClickHouse 基本上与标准 SQL 差别不大,支持子查询、各种 JOIN、各种函数…

SELECT [DISTINCT] expr_list[FROM [db.]table | (subquery) | table_function] [FINAL][SAMPLE sample_coeff][ARRAY JOIN ...][GLOBAL] ANY|ALL INNER|LEFT JOIN (subquery)|table USING columns_list[PREWHERE expr][WHERE expr][GROUP BY expr_list] [WITH TOTALS][HAVING expr][ORDER BY expr_list][LIMIT [n, ]m][UNION ALL ...][INTO OUTFILE filename][FORMAT format][LIMIT n BY columns]

5.2. insert

基本与标准 SQL(MySQL)基本一致

标准

insert into [table_name] select a,b,c from [table_name_2]

从表到表的插入

insert into [table_name] values(),(.)

5.3. update 和 delete

ClickHouse 提供了 Delete 和 Update 的能力,这类操作被称为 Mutation 查询,它可以看做 Alter 的一种。
虽然可以实现修改和删除,但是和一般的 OLTP 数据库不一样,Mutation 语句是一种很“重”的操作,而且不支持事务。
每次修改或者删除都会导致放弃目标数据的原有分区,重建新分区。所以尽量做批量的变更,不要进行频繁小数据的操作

删除操作

alter table t_order_smt delete where sku_id ='sku_001';

修改操作

alter table t_order_smt update total_amount=toDecimal32(2000.00,2) where id =102;

由于操作比较“重”,所以 Mutation 语句分两步执行,同步执行的部分其实只是进行新增数据新增分区和并把旧分区打上逻辑上的失效标记。直到触发分区合并的时候,才会删除旧数据释放磁盘空间,一般不会开放这样的功能给用户,由管理员完成。

5.4. alter

同 MySQL 的修改字段基本一致

新增字段

alter table tableName add column newcolname String after col1;

删除字段

alter table tableName drop column newcolname;

修改字段类型

alter table tableName modify column newcolname String;

相关文章:

ClickHouse介绍和使用

ClickHouse介绍和使用 1. 简介2. ClickHouse特点3. 数据类型3.1. 整型3.2. 浮点型3.3. Decimal型3.4. 布尔型3.5. 字符串3.6. 枚举类型3.7. 时间类型 4. 表引擎4.1. TinyLog4.2. Memory4.3. MergeTree4.3.1. partition by分区(可选)4.3.2. primary key 主…...

数码管动态扫描

/*----------------------------------------------- 内容&#xff1a;数码管使用动态扫描显示&#xff0c;所以可以同时看到数码管同时显示数字或者字符。 ------------------------------------------------*/ #include<reg52.h> //包含头文件&#xff0c;一般情况不…...

Webpack 中 loader 的作用是什么?常用 loader 有哪些?

说说webpack中常见的Loader&#xff1f;解决了什么问题&#xff1f;- 题目详情 - 前端面试题宝典 1、loader 是什么 loader是 webpack 最重要的部分之一。 通过使用不同的 loader&#xff0c;我们能够调用外部的脚本或者工具&#xff0c;实现对不同格式文件的处理。 loader…...

c#,字段和属性的区别

c#,string test和string test{ges;set;}有什么区别 在C#中&#xff0c;string test和string test { get; set; }表达了两种不同的成员声明&#xff0c;它们在类中的作用和访问方式是不同的。 string test: 这是一个字段&#xff08;field&#xff09;声明。它声明了一个类型…...

ideal一键部署SpringBoot项目jar包到服务器

一 简介 我们在开发环境部署项目一般通过ideal将项目打包成jar包&#xff0c;然后连接linux服务器&#xff0c;将jar手动上传到服务中&#xff0c;重启服务。 概括的说流程是这样的: 本地打包->上传到服务器->kill掉以前的服务->重新启动jar包服务 每次总是循环这一…...

宝塔部署QQ机器人,提示OpenSSL 1.0.2k-fips 26 Jan 2017

1、报错预览 Traceback (most recent call last):File "/www/wwwroot/python/bot-one/main.py", line 5, in <module>import requestsFile "/www/wwwroot/python/bot-one/343ae0eb0d491a10a1a00c0621b03ed0_venv/lib/python3.9/site-packages/requests/_…...

K8S篇之简述K8S底层原理

k8s底层原理 Kubernetes&#xff08;简称k8s&#xff09;是一个开源的容器编排平台&#xff0c;它可以自动化地部署、扩展和管理容器化应用程序。 Kubernetes 底层原理是其能够实现这些功能的关键。 1 节点和控制平面 Kubernetes 由两个主要组件组成&#xff1a;节点Node和控…...

打开ps提示,计算机中丢失d3dcompiler_47.dll怎么解决?

“d3dcompiler_47.dll丢失5个解决办法”。相信很多同事在工作或者娱乐的过程中&#xff0c;都遇到过这个错误提示。那么&#xff0c;究竟什么是d3dcompiler_47.dll文件&#xff1f;为什么会丢失呢&#xff1f;又该如何解决这个问题呢&#xff1f;接下来&#xff0c;我将为大家详…...

torch.mm

torch.mm(input, mat2, *, outNone) → Tensor执行矩阵input和mat2的矩阵乘法运算。 如果input是&#xff08;nm&#xff09;张量&#xff0c;mat2是&#xff08;mp&#xff09;张量&#xff0c;out将是&#xff08;n x p&#xff09;张量。 input&#xff08;张量&#xff0…...

github遇到想要强制拉取远程仓库内容

进行项目的时候&#xff0c;遇到了我的远程仓库 Sync fork 更新以后&#xff0c;这时候我的本地就和远程不同步&#xff0c;如果使用 git pull 的时候&#xff0c;如果出现 conficts 过多的情况怎么办&#xff0c;如果我们想要直接把远程仓库拉下来应该怎么办&#xff1f; git…...

django+drf+vue 简单系统搭建 (2) - drf 应用

按照本系统设置目的&#xff0c;是为了建立一些工具用来处理简单的文件。 1. 准备djangorestframework 关于drf的说明请参见&#xff1a;Django REST Framework教程 | 大江狗的博客 本系列直接使用drf的序列化等其他功能。 安装 conda install djangorestframework conda i…...

【FastCAE源码阅读7】视图方向切换按钮实现原理

在FastCAE工具栏上有视图切换按钮&#xff0c;如下图所示&#xff1a; 本文介绍如何实现。 FastCAE集成了Python解析器&#xff0c;当单击按钮时&#xff0c;中间用Python执行的&#xff0c;最后调用MainWindow.dll库接口实现的。 具体的Python代码在Python模块的py文件夹下的…...

小程序如何设置自取模式下的服务方式

设置自取模式下的服务方式是非常重要的&#xff0c;尤其是对于到店自取和到店堂食这两种不同的服务模式。下面我们就来介绍一下如何在小程序中设置这两种服务方式。 在小程序管理员后台->配送设置处&#xff0c;在服务方式处&#xff0c;设置自取情况下的服务方式。默认是&…...

使用数据分析,识别设备异常

设备健康监测系统在工业领域中扮演着至关重要的角色&#xff0c;它能够帮助企业及时发现设备异常&#xff0c;预防故障&#xff0c;提高设备使用寿命和生产效率。而异常诊断技术则是设备健康监测系统中的核心部分&#xff0c;能够实现对设备异常情况的准确判断。根据设备状态数…...

redis数据倾斜如何解决

Redis数据倾斜主要是由于数据访问热点导致的&#xff0c;通常在执行事务操作或范围查询时发生。这会导致大量数据集中在某个实例上&#xff0c;使得集群负载不均衡。以下是一些解决Redis数据倾斜的方法&#xff1a; 避免在同一个键值对上保存过多的数据。可以将大的键值对拆分…...

ATFX汇市:美联储鲍威尔再发鹰派言论,美元指数逼近106关口

ATFX汇市&#xff1a;11月10日&#xff0c;美联储主席鲍威尔在IMF举办的专家小组会议上讲话称&#xff1a;“如果进一步收紧货币政策变得合适&#xff0c;美联储‘将毫不犹豫地’这样做。”他还提到&#xff0c;对目前通胀进展感到满意&#xff0c;但“还有很长的路要走”。鲍威…...

【异常----finally和自定义异常】

文章目录 finally练习问题 异常的处理流程【异常处理流程总结】自定义异常类 finally 有些特定的代码&#xff0c;不论程序是否发生异常&#xff0c;都需要执行&#xff0c;比如程序中打开的资源&#xff1a;在程序正常或者异常退出时&#xff0c;必须要对资源进进行回收。另外…...

C# OpenCvSharp 环形文字处理 直角坐标与极坐标转换

效果1 效果2 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.*…...

计算机视觉与深度学习 | 视频/图像转换及保存播放(Matlab源码)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 视频/图像转换及保存/播放 avi2img.m 功能:将视频转换为单张图片avi2m…...

网格变形算法

网格变形 需求分析技术分析 需求分析 根据几何模型上的几个特征点&#xff0c;对几何模型进行变形。比如 技术分析 把几何模型使用三角面片表示&#xff0c;然后通过网格映射变形进行实现。关于网格这块有本经典的书可以参考&#xff0c;《ploygon mesh processing》。上面…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...