clickhouse初学以及利用ck实现BI系统的增量更新
文章目录
- 概述
- 适用场景
- 库引擎(部分)
- 1、Atomic
- 2、Lazy
- 3、Mysql、SQLite、PostergreSQL等一系列
- 数据类型(部分)
- 表引擎-合并树系列
- ReplacingMergeTree
- SummingMergeTree
- 分区
- clickhouse底层的合并操作Merge
- 排序键
- 主键
- 数据修改删除SQL语法
- 数据副本
- 分布式表引擎
- 读写流程(概述)
- 分布式表写入流程
- 读流程
- 读相关的数据一致性问题
- SQL优化方面的使用建议
- BI系统中数据的增量更新(replace into)
概述
clickhouse官方文档 https://clickhouse.com/docs/zh/
clickhouse是OLAP的列式数据库,底层是C++编写的。
相比于OLTP在线事务的处理,clickhouse更关注于海量数据的计算分析,关注的是数据吞吐、查询速度、计算性能等指标,对于数据频繁变更不太擅长,所以clickhouse通常用来构建后端的离线和实时数仓。
适用场景
1、绝大多数都是读请求,对数据的修改比较少或者几乎没有
2、数据量很大,既包括数据的行数,也包括数据的列数(宽表)
3、数据通常是大的批次进行更新而不是单行更新
4、对事务的要求不是必须的,通常只要求数据最终一致性
5、clickhouse对内存以及cpu的要求特别高
库引擎(部分)
1、Atomic
clickhouse默认的库引擎,它支持非阻塞的DROP TABLE和RENAME TABLE查询和原子的EXCHANGE TABLES t1 AND t2查询。
2、Lazy
类似于日志的功能,在最后一次访问之后,只在RAM中保存expiration_time_in_seconds秒。只能用于*Log表。
建库语句:
CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);
3、Mysql、SQLite、PostergreSQL等一系列
拿Mysql举例,相当于通过clickhouse来连接Mysql的是数据库,可以执行insert、delete等sql语句,但不能执行create table、alter、rename等sql语句。这些库引擎,在clickhouse中不存储数据,只是将请求转发给了Mysql。
建库语句:
CREATE DATABASE test_database
ENGINE = PostgreSQL(‘host:port’, ‘database’, ‘user’, ‘password’[, use_table_cache
]);
数据类型(部分)
注意大小写(ck严格要求大小写)
1、整型
Int8 Int16 Int32 Int64
2、无符号整型
UInt8 UInt16 UInt32 UInt64
3、浮点型
Float32 Float64
4、Decimal类型
Decimal32(s) Decimal64(s) Decimal128(s)
5、字符型
String
6、时间类型
Date 2022-03-01
Datetime 2022-03-01 10:10:10
Datetime64 2022-03-01 10:10:10.230
7、可为空类型
官方:总是对性能产生负面影响
Nullable
Create table test(x Nullable(Int8)) engine =
8、UUID类型
自动生成无序的随机数, select generateUUIDv4()
表引擎-合并树系列
MergeTree所有系列的表引擎前都可加前缀 Replicated 是支持数据副本的意思
ReplacingMergeTree
SummingMergeTree
分区
[PARTITION BY expr]
查询本地表的分区SQL:select partition from system.parts where table = ’ ';
1、在服务器上,每张表里的数据分区样式,下图是例子t_stock表
第一个_1代表数据块最小的编号,第二个_1代表数据块最大的编号,_0代表合并的次数
2、再看看每个数据块里的数据:
data.bin 里存着压缩后的数据
columns.txt是列信息
3、服务器上的查询结果:
clickhouse底层的合并操作Merge
数据从内存写入硬盘的操作称为合并操作,
合并方式有两种:
方式一:clickhouse后台会不定时的自动执行合并操作(3-5分钟?)
方式二:手动干预合并 sql:optimize table tableName final;
1、看看新增数据后,没有合并前的效果
2、手动干预合并后的效果
3、合并前和合并后的数据块截图
合并后不会删除掉之前的数据块,ck后期会有一个大合并,这时才会删掉废弃的数据块
排序键
ORDER BY exper
order by可以设置多个字段列
主键
[PRIMARY KEY expr]
数据修改删除SQL语法
修改和删除操作,会新产生一个临时分区,原始的数据会打一个删除的标记,频繁的修改和删除会产生大量的临时分区,会进行大量的合并,服务器压力就变大了
数据副本
clickhouse副本和副本之间没有主从关系
分布式表引擎
可以通过 [create table ‘tableName’ on cluster logs] 来进行,on cluster logs表示在logs这个集群上执行
读写流程(概述)
分布式表写入流程
1、设置同步or异步的配置
insert_sync = ture时表示同步写入,配合insert_timeout参数使用,i
Insert_sync = false 时表示异步写入
同步写入是指数据直接写入实际的表中,而异步写入是指数据首先被写入本地文件系统,然后发送到远端节点
2、写入流程
2.1、
Internal_reliaction参数,false时,所有副本,都由分布式表来完成写入操作
Internal_reliaction参数,true时,只有每个分片中的一个副本由分布式表来完成写入操作。
2.2、true时,使用到了数据副本的机制,当分片1中r1给r2同步时,r2挂掉了,在r2恢复后,会有一个重试的操作。
2.3、写入是有一个数据权重分配策略,可以配置的
读流程
每个副本上都有一个errors_count的一个错误记录,当读取命令打在分布式表上时,分布式表会优先选择errors_count小的副本进行读取
读相关的数据一致性问题
https://cloud.tencent.com/developer/article/1748216
SQL优化方面的使用建议
clickhouse支持explan进行查询执行计划等操作,详情见开发文档https://clickhouse.com/docs/zh/sql-reference/statements/explain/
sql上的注意事项:https://www.jianshu.com/p/e5050f046699
BI系统中数据的增量更新(replace into)
Asteria增量更新如何实现?
1、查询ck本地表中的分区sql
select partition from system.parts where table = ‘’;
2、Ck表的分区是如下两种格式(clickhouse_version_value是插入ck表时这批数据的版本号,时间戳)
2.1、设置里以date类型的字段为分区
PARTITION BY (clickhouse_version_value, toYYYYMMDD(toDate(substring(‘field_value’, 1, 10))))
对应的ck里的分区样式 (‘20220324081602’,20220314)
2.2、默认无设置数据集分区
PARTITION BY (clickhouse_version_value, toYYYYMM(clickhouse_version_value))
3、数据replace into流程举例
3.1、增量更新第一次更新,表中的数据:
Day | orderId | price | asteria_order | clickhouse_version_value |
---|---|---|---|---|
20220324 | 订单号一 | 20元 | 1 | 20220324101010 |
20220324 | 订单号二 | 15元 | 2 | 20220324101010 |
20220325 | 订单号三 | 19元 | 3 | 20220324101010 |
3.2、增量更新,第二次运行sql查询出来的数据:
Day | orderId | price | asteria_order | clickhouse_version_value |
---|---|---|---|---|
20220325 | 订单号三 | 22元 | 4 | 20220324202020 |
20220325 | 订单号四 | 31元 | 5 | 20220324202020 |
20220326 | 订单号五 | 32元 | 6 | 20220324202020 |
3.3、查询出每个本地表中的旧分区信息
(20220324101010, 20220324)
(20220324101010, 20220325)
3.4、将第二次sql查询出的数据插入ck表中
3.5、查询clickhouse_version_value = ‘20220324202020’ 的字段day的数据
20220325、20220326
3.6、对3.2中旧分区的右半部分进行匹配,删除掉新增的数据中匹配成功的day数据,即:20220305
Alter table tableNamecluster drop partiton (20220324101010, 20220325);
3.7、结束,最后表中的数据如下图
Day | orderId | price | asteria_order | clickhouse_version_value |
---|---|---|---|---|
20220324 | 订单号一 | 20元 | 1 | 20220324101010 |
20220324 | 订单号二 | 15元 | 2 | 20220324101010 |
20220325 | 订单号三 | 22元 | 4 | 20220324202020 |
20220325 | 订单号四 | 31元 | 5 | 20220324202020 |
20220326 | 订单号五 | 32元 | 6 | 20220324202020 |
clickhouse初学以及利用ck实现BI系统的增量更新相关推荐
- 从Hadoop到ClickHouse,现代BI系统有哪些问题?如何解决?
导读:一次机缘巧合,在研究BI产品技术选型的时候,我接触到了ClickHouse,瞬间就被其惊人的性能所折服.这款非Hadoop生态.简单.自成一体的技术组件引起了我极大的好奇.那么ClickHous ...
- clickhouse注入的利用
clickhouse到底是什么? 初学者可以把clickhouse可以类比为mysql.它们很像,但毕竟不是同一个东西. clickhouse被开发出来的目的和使用的场景和特性,都和mysql不太一样 ...
- 你知道 BI 是什么吗?关于 BI 系统的概述
BI 作为信息化建设中的关键一环,在企业中通常起到承上启下的作用,下能连接打通企业业务系统数据库,将各部门数据分类分级统一储存到数据仓库,简化存储取数流程,减少人力.时间成本:上能提供数据可视化报表 ...
- Bi系统跟数据中台的区别是什么?
随着数据时代的发展,BI分析是当今数据时代必不可少的能力之一.BI系统通过系统化产品化的方法,能够大幅降低数据的获取成本.提升数据使用效率.同时借助可视化.交互式的操作,可以高效支持业务的分析及发展. ...
- 什么样的企业会上BI系统?
像HARDEE'S,WENDY'S,RUBY TUESDAY 和T.G.I. FRIDAY'S这样的连锁餐馆业大量地使用着商业智能(BI)软件.他们用商业智能(BI)做出战略决策,诸如在菜单上添加什么 ...
- BI 系统中为什么会有很多冗余的快照表?
前言 观察一些大型用户的BI系统,经常会发现数据仓库中有很多快照表.如某交易业务的BI系统,交易明细表很大,被按月存储成多个分段表.还有一些相对不太大的表,计算时要和交易明细表关联,比如客户表.雇员表 ...
- BI 系统中为什么会有很多快照表?
观察一些大型用户的BI系统,经常会发现数据仓库中有很多快照表.如某交易业务的BI系统,交易明细表很大,被按月存储成多个分段表.还有一些相对不太大的表,计算时要和交易明细表关联,比如客户表.雇员表.商品 ...
- 数据蒋堂 | BI系统中容易被忽视的数据源功能
作者:蒋步星 来源:数据蒋堂 本文共1100字,建议阅读8分钟. 关注BI系统数据源有关的后台功能点. 用户在选购BI解决方案的时候,常常会更关注界面环节的功能指标,比如美观性.操作的流畅性.移动端支 ...
- 数据蒋堂 | BI系统的前置计算
作者:蒋步星 来源:数据蒋堂 本文共2500字,建议阅读8分钟. 如何减轻中央数据仓库的负担? 某机构上了一套分布式数据仓库,历史数据逐步装进了仓库,然后,基于数据仓库构建了BI系统(主要是多维分析) ...
最新文章
- 汇总|Yolo开源项目
- android WIFI检测与设置
- 内存映像分析工具Eclipse Memory Analyzer
- 解决 C/C++ 程序执行后控制台一闪而过的方法
- [Alfred]为Baidu Weather Workflow更新图标
- yum源yum-fastestmirror
- rip c语言,GNU C 对标准C语言的扩展
- 360浏览器如何进行皮肤更换
- dfs序 + RMQ = LCA
- Python——数据存储:JSON操作
- JavaScript 省市县数据
- CentOs7 docker部署face_recognition
- 千千静听V5.6 Beta3 美化增强版
- 如何在2015年后的MacBook Air上安装双系统
- 游戏辅助小助手框架构想
- Win10安装cuda、cudnn检测是否安装成功
- dedecms织梦后台登录一直提示验证码错误
- c语言游泳是怎么钓鱼的,不会游泳的钓友进来看 自制饵料钓鲤鱼
- cadence学习笔记 从ultra librarain网站下载封装并生成封装文件
- 关于云数据管理的复兴之路是怎样的?
热门文章
- 云计算的三国演义!华为云、阿里云、腾讯云B端市场策略全解读
- 5G步入规模化商用关键期
- 5G商用价值到底在哪里,可以赋予哪些能力?
- 2021年最新抓取微博所有图片,所有视频,所有评论,保存数据库excel
- 安卓开发自学教程,Android研发岗必问30+道高级面试题
- 山经·南山经:猨翼山 [yuán yì shān]
- 林轩田机器学习 | 机器学习技法课程笔记10 --- Random Forest
- 2018-07-03 根据Excel后缀名获取WorkBook
- 解决Mysql:Incorrect string value: '\xF0\x9F\x8D\x83\xF0\x9F...' for column
- 笔记本键盘输入错乱,字母都变成数字了