Clickhouse基础(一)

数据存储的目录,在存储数据时是先经过压缩后再存储的,压缩效率很高
在这里插入图片描述

操作命令:

sudo clickhouse start
sudo clickhouse restart
sudo clickhouse status进入clickhouse
clickhouse-client -m
CREATE TABLE db_13.t_assist
(`modelId` UInt64,`taskId` UInt64,`testNo` String,`tdId` UInt64,`eventDay` String,`eventDaytime` UInt64,`eventBatch` UInt64,`eventId` UInt64,`imageIndex` String,`gcz_50` String,`ymz_50` String,`gcz_51` String,....`gcz_89` String,`ymz_89` String
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/86ee6ab8-6acb-46e8-b80f-a1786df37850/{shard}','{replica}')
PARTITION BY tdId
ORDER BY (modelId,tdId,eventBatch,eventDay,eventId)
SETTINGS index_granularity = 8192

1)表引擎类型

ReplicatedReplacingMergeTree

2)PARTITION BY tdId

表示按照tdId【通道id】进行分区存储

3)index_granularity = 8192

直接翻译的话就是索引粒度,指在稀疏索引中两个相邻索引对应数据的间隔。ClickHouse 中的 MergeTree 默认是 8192。官方不建议修改这个值,除非该列存在大量重复值,比如在一个分区中几万行才有一个不同数据

2、表引擎

ck中的表引擎类似于mysql中的表引擎

1.1 MergeTree

Clickhouse中最强大的表引擎当属MergeTree(合并树)引擎及该系列(*MergeTree)中的其他引擎,支持索引和分区,地位可以相当于innodb在Mysql。还基于MergeTree衍生很多其他有特色的引擎。

docker中安装的clickhouse,需要进入ck命令

# docker exec -it clickhouse /bin/bash
# /bin/clickhouse-client --password输入命令进入

查看default库下的表

2.1 建表关键字说明

1、建表语句:

CREATE TABLE default.t_order_mt
(`id` UInt32,`sku_id` String,`total_amount` Decimal(16,2),`create_time` DateTime
)
ENGINE = MergeTree
PARTITION BY toYYYYMMDD(create_time)
PRIMARY KEY id
ORDER BY (id,sku_id)
SETTINGS index_granularity = 8192

插入数据:

insert into t_order_mt values
(101,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(102,'sku_002',2000.00,'2020-06-01 11:00:00'),
(102,'sku_004',2500.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 13:00:00'),
(102,'sku_002',12000.00,'2020-06-01 13:00:00'),
(102,'sku_002',600.00,'2020-06-02 12:00:00');

2、分区:PARTITION BY toYYYYMMDD(create_time) 【可选

分区目的:主要是 降低扫描的范围,优化查询速度

如果不填,只会使用一个分区

查看表出现分片的情况

为什么分为两片数据?

因为建表中通过年月月进行分区存储

3、主键id出现重复:PRIMARY KEY id【可选****】

Clickhouse中的PRIMARY KEY语法不会将主键做唯一约束,可重复

3、排序:ORDER BY (id,sku_id) 【必选

排序是分区内进行排序的

注意:ORDER BY 是必须要的

4、目录说明

(1)data目录:数据目录

文件夹名称说明:

20200601_1_1_0

20200601:就是按照建表语句中的年月日进行分区存储

(2)metadata:建表sql语句【元数据】

5、并行

分区后,面对涉及跨分区的查询统计,ClickHouse 会以分区为单位并行处理

6、 数据写入与分区合并

  <font style="background-color:#FBDE28;">任何一个批次的数据写入都会产生一个临时分区,不会纳入任何一个已有的分区。写入 后的某个时刻(大概 10-15 分钟后),ClickHouse 会自动执行合并操作(等不及也可以手动 通过 optimize 执行),把临时分区的数据,合并到已有分区中</font>  
optimize table 表名 final;

再次插入相同的数据

从命令行查询表数据

查看数据并没有纳入任何分区 ,发现出现四个分区及对应的四个分区文件

手动 optimize 之后

2.2 二级索引

2.3 ReplacingMergeTree引擎

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

(1)创建表

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

ReplacingMergeTree() 填入的参数为版本字段,重复数据保留版本字段值最大的。 如果不填版本字段,默认按照插入顺序保留最后一条。

(2)向表中插入数据

内部会自动合并

insert into t_order_rmt values
(101,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(102,'sku_002',2000.00,'2020-06-01 11:00:00'),
(102,'sku_004',2500.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 13:00:00'),
(102,'sku_002',12000.00,'2020-06-01 13:00:00'),
(102,'sku_002',600.00,'2020-06-02 12:00:00');

(3) 执行一次查询

首先按照日期时间进行分区,再通过id,sku_id两个字段分组去重,默认按照插入顺序保留最后一条。

2.4 SummingMergeTree
对于不查询明细,只关心以维度进行<font style="color:#DF2A3F;">汇总聚合</font>结果的场景。如果只使用普通的MergeTree 的话,无论是存储空间的开销,还是查询时临时聚合的开销都比较大。 ClickHouse 为了这种场景,提供了一种能够“预聚合”的引擎 SummingMergeTree。

1、创建表

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

2、插入数据

insert into t_order_smt values
(101,'sku_001',1000.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 11:00:00'),
(102,'sku_004',2500.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 13:00:00'),
(102,'sku_002',12000.00,'2020-06-01 13:00:00'),
(102,'sku_002',600.00,'2020-06-02 12:00:00');

3、查询

将id、sku_id数据相同,并且在同一分区的数据,统计total_amount的数值

3、SQL操作

3.1 insert与mysql语法一致
3.2 Update和delete

生产环境不建议使用

(1)删除操作

alter table t_order_smt delete where sku_id ='sku_001';// 清空表
alter table t_order_smt delete where 1 = 1;

(2)修改操作

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

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

3.3 alter操作

同 MySQL 的修改字段基本一致

1)新增字段

alter table t_order_smt add column testNo String after create_time;

2) 修改字段类型

alter table t_order_smt modify column testNo UInt32;

3)删除字段

alter table t_order_smt drop column testNo;
select * from t_order_smt;

4)导出数据

clickhouse-client --query "select * from t_order_mt where 
create_time='2020-06-01 12:00:00'" --format CSVWithNames> 
/opt/module/data/rs1.csv

4、副本

<font style="background-color:#FBDE28;">副本的目的主要是保障数据的高可用性,即使一台 ClickHouse 节点宕机,那么也可以从 其他服务器获得相同的数据。</font> 

https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/

4.1 副本写入流程

clickhouse中没有主从之分,人人平等,任意一个节点收到数据后,都会向其他节点同步数据。

4.2 配置步骤

(1)启动zookeeper集群

(2) 在 hadoop102 的/etc/clickhouse-server/config.d 目录下创建一个名为 metrika.xml 的配置文件,内容如下:

修改config.xml配置文件

vi /etc/clickhouse-server/config.xml

添加以下配置

<zookeeper incl="zookeeper-servers" optional="true" / >
<zookeeper><node><host>192.168.58.135</host><port>2181</port></node><node><host>192.168.58.136</host><port>2181</port></node><node><host>192.168.58.137</host><port>2181</port></node>
</zookeeper>

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

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

相关文章

基于spingbott+html+Thymeleaf的24小时智能服务器监控平台设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

从 SQL 语句到数据库操作

1. SQL 语句分类 数据定义语言 DDL &#xff1a; 用于定义或修改数据库中的结构&#xff0c;如&#xff1a;创建、修改、删除数据库对象。create、drop alter 数据操作语言 DML &#xff1a; 用于添加、删除、更新数据库中的数据。select、insert alter、drop 数据控制语言 D…

Excel中SUM求和为0?难道是Excel有Bug!

大家好&#xff0c;我是小鱼。 在日常工作中有时会遇到这样的情况&#xff0c;对Excel表格数据进行求和时&#xff0c;结果竟然是0&#xff0c;很多小伙伴甚至都怀疑是不是Excel有Bug&#xff01;其实&#xff0c;在WPS的Excel表格中数据求和&#xff0c;结果为0无法正确求和的…

【简博士统计学习方法】第2章:3. 感知机——学习算法之对偶形式:算法解说

3. 感知机——学习算法之对偶形式&#xff1a;算法解说 3.4 对偶形式 在原始形式中&#xff0c;若 ( x i , y i ) (x_i,y_i) (xi​,yi​)为误分类点&#xff0c;可如下更新参数&#xff1a; w ← w η y i x i ; b ← b η y i w \leftarrow w\eta y_{i} x_{i} ; \quad b …

YARN 集群

一、集群角色 1.1 概述 Apache Hadoop YARN是一个标准的Master/Slave集群&#xff08;主从架构&#xff09;。其中ResourceManager&#xff08;RM&#xff09; 为Master&#xff0c; NodeManager&#xff08;NM&#xff09; 为 Slave。常见的是一主多从集群&#xff0c;也可以…

ASP.NET Core - .NET 6 以上版本的入口文件

ASP.NET Core - .NET 6 以上版本的入口文件 自从.NET 6 开始&#xff0c;微软对应用的入口文件进行了调整&#xff0c;移除了 Main 方法和 Startup 文件&#xff0c;使用顶级语句的写法&#xff0c;将应用初始化的相关配置和操作全部集中在 Program.cs 文件中&#xff0c;如下&…

云平台一键部署【Video-Background-Removal】视频换背景,无任何限制,随意换

Video-Background-Removal 是一款革命性的视频背景替换工具&#xff0c;旨在让用户轻松实现视频背景的快速更换。无论你是专业创作者还是普通用户&#xff0c;这款软件都能让你在几秒钟内改变背景&#xff0c;完全消除限制&#xff0c;随心所欲&#xff0c;随时随地想换就换&am…

独立开发者工具集:AppSumo网站科普

独立开发者经常会访问 AppSumo&#xff0c;原因在于以下几点&#xff1a; 推广自己的产品&#xff1a; AppSumo 对独立开发者来说是一个很好的分发平台&#xff0c;能够帮助他们快速触达大量潜在用户。通过在 AppSumo 上发布限时优惠&#xff0c;开发者可以获得更多的曝光、用…

Apache Hop从入门到精通 第三课 Apache Hop下载安装

1、下载 官方下载地址&#xff1a;https://hop.apache.org/download/&#xff0c;本教程是基于apache-hop-client-2.11.0.zip进行解压&#xff0c;需要jdk17&#xff0c;小伙伴们可以根据自己的需求下载相应的版本。如下图所示 2、下载jdk17&#xff08;https://www.microsoft…

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found. 1. 故障现象2. 解决思路3. 故障分析4. 案件回溯5. 解决问题 1. 故障现象 有一台服务器业务报无法连接. 尝试用Ping命令发现无法ping通. 通过控制台查看发现有以下报错: error: ..…

解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题

1. IsaacGymEnvs项目介绍 IsaacGymEnvs&#xff1a;基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库&#xff0c;专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎&#xf…

AI浪潮下的IT变革之路:机遇、挑战与重塑未来

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 AI浪…

010:传统计算机视觉之大津算法初探

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节学习了利用 Canny 算法来完成一个图片的边缘检测&#xff0c;从而可以区分出图像的边缘。 本节再了解一个计算机视觉中更常见的应用&#xff0c;那就是把图片的前景和…

【Redis】初识分布式系统

目录 单机架构 分布式系统 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 冷热分离架构 垂直分库 微服务架构 分布式名词概念 本篇博文&#xff0c;将根据分布式系统的演进一步一步介绍每一种架构的形式&#xff0c;最后为大家总结了一些分布式中常用的…

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组&#xff0c;使用广播信道 特点&#xff1a; 覆盖范围有限&#xff1a;通常局限在几千米范围内&#xff0c;比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高&#xff1a;一般能达到 10Mbps…

配置 One API + ChatGPT-Next-Web,以讯飞星火认知大模型为例

配置 One API ChatGPT-Next-Web&#xff0c;以讯飞星火认知大模型为例 1.0 One API 配置1.1 获取大模型 API1.2 配置 OneAPI 渠道1.3 配置OneAPI 令牌 2.0 ChatGPT-Next-Web 配置 同步发布在个人笔记配置 One API ChatGPT-Next-Web&#xff0c;以讯飞星火认知大模型为例 上一…

Leetcode - 147双周赛

目录 一、3407. 子字符串匹配模式二、3408. 设计任务管理器三、3409. 最长相邻绝对差递减子序列四、3410. 删除所有值为某个元素后的最大子数组和 一、3407. 子字符串匹配模式 题目链接 字符串匹配问题&#xff0c;把字符串 p 分成两段 、&#xff0c;i 是 ’ * ’ 的下标&am…

SqlSugar连接达梦数据库集群超时或异常缓慢

《SqlSugar配置连接达梦数据库集群》文章中介绍SqlSugar连接达梦数据库集群&#xff0c;只需按下图所示位置添加dm_svc.conf文件&#xff0c;并在SqlSugar的连接字符串中指定服务名即可。   但在使用过程中发现&#xff0c;基于.net 6开发的WebApi&#xff0c;编译为ANYCPU&…

探秘 JMeter (Interleave Controller)交错控制器:解锁性能测试的隐藏密码

嘿&#xff0c;小伙伴们&#xff01;今天咱们要把 JMeter 里超厉害的 Interleave Controller&#xff08;交错控制器&#xff09;研究个透&#xff0c;让你从新手直接进阶成高手&#xff0c;轻松拿捏各种性能测试难题&#xff01; 一、Interleave Controller 深度剖析 所属家族…

C++内存泄露排查

内存泄漏是指程序动态分配的内存未能及时释放&#xff0c;导致系统内存逐渐耗尽&#xff0c;最终可能造成程序崩溃或性能下降。在C中&#xff0c;内存泄漏通常发生在使用new或malloc等分配内存的操作时&#xff0c;但没有正确地使用delete或free来释放这块内存。 在日常开发过程…