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. 字符串

String

FixedString(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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】原型和原型链(持续完善)

概念 原型:函数都具有 prototype 属性,称之为原型,也称之为原型对象 1.1 原型可以放一些属性和方法,共享给实例对象使用(也就是原生方法)。 1.2 原型可以做继承原型链:对象都有 __proto__ 属性…

leetcode一道比较难的链表题

今天还是继续来分享我们的链表题,这个题目有点难,主要是思路比较难想,但是如果沥青思路写起来就比较简单了(我乱讲的) 随机链表的复制 这个是题目的描述,大家也可以在链接里看,那我把这道题目…

深眸科技聚焦3D机器视觉技术,从技术形态到应用前景实现详细分析

机器视觉技术的不断升级,使得对二维图像的处理逐渐扩展到了更复杂的三维领域,形成了3D机器视觉。3D机器视觉是机器视觉的重要应用领域之一,通过计算机能够在短时间内处理视觉传感器采集的图像信号,从而获得目标对象的三维信息。 …

通过Cookie和Session来实现网站中登录账号的功能

文章目录 一、Cookie和Session二、基于Cookie和Session实现登录账号的功能2.1步骤一2.2步骤二2.3步骤三2.4总结通过Cookie和Session来实现登录功能2.5运行截图 一、Cookie和Session cookie是http请求header中的一个属性,是浏览器持久化存储数据的一种机制&#xff…

OCR文字识别生成双层PDF,一键解锁文件编辑新技能

在当今信息时代,OCR(Optical Character Recognition)技术已经成为数字化转型中不可或缺的一环。利用OCR技术,我们可以将纸质文档转化为可编辑的电子文档,便于存储、检索和共享。然而,有时候我们需要将识别后…

自考改革过渡期!广东小自考最优解只需要2门笔试

图片来源:广东省考试院* 近期广东教育考试院公布了自考专业调整的相关通知,新的专业考试计划从2026年1月起执行。 这次改革过渡期中有一个重大利好消息,小自考专业笔试统考科目最少只需考2门笔试! 这是为什么呢? 小…

黑洞路由的几种应用场景

第一种在内网中产生环路: 这种核心交换机上肯定写一条默认路由 0.0.0.0 0 10.0.0.1 出口路由要写一条192.168.0.0 16 10.0.0.2 如果出口路由访问一条不存在的内网网段,又或者访问的那台终端停机了,那就会产生三层环路,数据包在…

git命令行操作

git remote update origin --prune 更新本地的git分支保持和远程分支一致 git clone -b develop XXX 拉取某个分支的代码 1、创建一个空文件夹,在其中打开Git Bash Here,输入: git clone 刚刚复制的粘贴过来,回车 2、打开你拉下…

【扩散模型】5、Diffusion models beat GAN | 使用类别引导图像生成

论文:Diffusion models beat GAN on image Synthesis 代码:https://github.com/openai/guided-diffusion 出处:OPENAI | NIPS2021 时间:2021 贡献: 在本文章之前,扩散模型生成的图片已经非常逼真了&am…

SpringBoot 配置进阶

一、ConfigurationProperties 1、 在类定义上 ConfigurationProperties注解,此注解是用来为bean绑定属性。使用步骤如下: 在配置文件 application.yml 中,添加配置信息 servers:ip-address: 127.0.0.1port: 8123创建配置类,并在…

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法!!!

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法 cuda10.0以及cudnn7.4现在以及安装完成,就差torch的安装了,现在torch我要装的是1.2.0版本的,安装包以及下载好了,安装包都是在这个网站里下载的(点此进入&…

python使用selenium做自动化,最新版Chrome与chromedriver不兼容

目前Chrome版本是118.0.5993.118 下方是版本对应的下载地址: chrome版本118: https://download.csdn.net/download/qq_35845339/88510476 chrome版本119: chromedriverlinux64https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testin…

【Linux C IO多路复用】多用户聊天系统

目录 Server-Client mutiplexingServer mutiplexingClient mutiplexing Server-Client 在Linux系统中,IO多路复用是一种机制,它允许一个进程能够监视多个文件描述符(sockets、pipes等)的可读、可写和异常等事件。这样&#xf…

洋子带你赚钱,粉丝有奖任务来啦,最高拿90京东卡

大家好,我是洋子,前段时间CSDN联合阿里云发布了免费试用3种 云服务器的活动任务,每完成一个任务就可以拿到30京东卡,3个任务互相独立,如果3个任务全部完成就可以拿到90京东卡 任务奖励 参与体验大概十几分钟&#xf…

类直径树上贪心

http://cplusoj.com/d/senior/p/SS231109C 场上想到枚举点&#xff0c;然后最大值为高&#xff0c;然后可以求最大值。但是感觉计数会重 计数其实不会重&#xff0c;如图中&#xff0c;红色线段显然比蓝色线段优 所以我们枚举3叉点时没错的 #include<bits/stdc.h> usin…

『亚马逊云科技产品测评』活动征文|AWS 云服务器实例类型及其适用场景详细说明

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 目录 一、AWS 定价计算器 &#xff08;1&#xff09;定价计算器官网 &…

深度学习_10_softmax_实战

由于网上代码的画图功能是基于jupyter记事本&#xff0c;而我用的是pycham,这导致画图代码不兼容pycharm,所以删去部分代码&#xff0c;以便能更好的在pycharm上运行 完整代码&#xff1a; import torch from d2l import torch as d2l"创建训练集&创建检测集合"…

使用合成数据训练语义分割模型

计算机视觉应用现在在各个科技领域无处不在。 这些模型高效且有效&#xff0c;研究人员每年都会尝试新想法。 新的前沿是试图消除深度学习的最大负担&#xff1a;需要大量的标记数据。 正如本文所述&#xff0c;此问题的解决方案是使用合成数据。 从这些研究中获益最多的计算机…

ros1 模拟客户端生成小乌龟服务请求生成小乌龟

模拟客户端生成小乌龟服务请求生成小乌龟 一、话题模型二、创建功能包三 创建客户端Client代码四 配置CMakeLists.txt编译规则&#xff1a;五 测试启动ros 主服务启动小乌龟的服务启动模型客户端服务 一、话题模型 Sever端是海龟仿真器/turtlesim&#xff0c;Client端是待实现…

Android 13.0 Launcher3 app图标长按去掉应用信息按钮

1.前言 在13.0的rom定制化开发中,在Launcher3定制化开发中,对Launcher3的定制化功能中,在Launcher3的app列表页会在长按时,弹出微件和应用信息两个按钮,点击对应的按钮跳转到相关的功能页面, 现在由于产品需求要求禁用应用信息,不让进入到应用信息页面所以要去掉应用信息…
最新文章