文章目录

  • 概述
  • 适用场景
  • 库引擎(部分)
    • 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系统的增量更新相关推荐

  1. 从Hadoop到ClickHouse,现代BI系统有哪些问题?如何解决?

    导读:一次机缘巧合,在研究BI产品技术选型的时候,我接触到了ClickHouse,瞬间就被其惊人的性能所折服.这款非Hadoop生态.简单.自成一体的技术组件引起了我极大的好奇.那么ClickHous ...

  2. clickhouse注入的利用

    clickhouse到底是什么? 初学者可以把clickhouse可以类比为mysql.它们很像,但毕竟不是同一个东西. clickhouse被开发出来的目的和使用的场景和特性,都和mysql不太一样 ...

  3. 你知道 BI 是什么吗?关于 BI 系统的概述

    BI  作为信息化建设中的关键一环,在企业中通常起到承上启下的作用,下能连接打通企业业务系统数据库,将各部门数据分类分级统一储存到数据仓库,简化存储取数流程,减少人力.时间成本:上能提供数据可视化报表 ...

  4. Bi系统跟数据中台的区别是什么?

    随着数据时代的发展,BI分析是当今数据时代必不可少的能力之一.BI系统通过系统化产品化的方法,能够大幅降低数据的获取成本.提升数据使用效率.同时借助可视化.交互式的操作,可以高效支持业务的分析及发展. ...

  5. 什么样的企业会上BI系统?

    像HARDEE'S,WENDY'S,RUBY TUESDAY 和T.G.I. FRIDAY'S这样的连锁餐馆业大量地使用着商业智能(BI)软件.他们用商业智能(BI)做出战略决策,诸如在菜单上添加什么 ...

  6. BI 系统中为什么会有很多冗余的快照表?

    前言 观察一些大型用户的BI系统,经常会发现数据仓库中有很多快照表.如某交易业务的BI系统,交易明细表很大,被按月存储成多个分段表.还有一些相对不太大的表,计算时要和交易明细表关联,比如客户表.雇员表 ...

  7. BI 系统中为什么会有很多快照表?

    观察一些大型用户的BI系统,经常会发现数据仓库中有很多快照表.如某交易业务的BI系统,交易明细表很大,被按月存储成多个分段表.还有一些相对不太大的表,计算时要和交易明细表关联,比如客户表.雇员表.商品 ...

  8. 数据蒋堂 | BI系统中容易被忽视的数据源功能

    作者:蒋步星 来源:数据蒋堂 本文共1100字,建议阅读8分钟. 关注BI系统数据源有关的后台功能点. 用户在选购BI解决方案的时候,常常会更关注界面环节的功能指标,比如美观性.操作的流畅性.移动端支 ...

  9. 数据蒋堂 | BI系统的前置计算

    作者:蒋步星 来源:数据蒋堂 本文共2500字,建议阅读8分钟. 如何减轻中央数据仓库的负担? 某机构上了一套分布式数据仓库,历史数据逐步装进了仓库,然后,基于数据仓库构建了BI系统(主要是多维分析) ...

最新文章

  1. 汇总|Yolo开源项目
  2. android WIFI检测与设置
  3. 内存映像分析工具Eclipse Memory Analyzer
  4. 解决 C/C++ 程序执行后控制台一闪而过的方法
  5. [Alfred]为Baidu Weather Workflow更新图标
  6. yum源yum-fastestmirror
  7. rip c语言,GNU C 对标准C语言的扩展
  8. 360浏览器如何进行皮肤更换
  9. dfs序 + RMQ = LCA
  10. Python——数据存储:JSON操作
  11. JavaScript 省市县数据
  12. CentOs7 docker部署face_recognition
  13. 千千静听V5.6 Beta3 美化增强版
  14. 如何在2015年后的MacBook Air上安装双系统
  15. 游戏辅助小助手框架构想
  16. Win10安装cuda、cudnn检测是否安装成功
  17. dedecms织梦后台登录一直提示验证码错误
  18. c语言游泳是怎么钓鱼的,不会游泳的钓友进来看 自制饵料钓鲤鱼
  19. cadence学习笔记 从ultra librarain网站下载封装并生成封装文件
  20. 关于云数据管理的复兴之路是怎样的?

热门文章

  1. 云计算的三国演义!华为云、阿里云、腾讯云B端市场策略全解读
  2. 5G步入规模化商用关键期
  3. 5G商用价值到底在哪里,可以赋予哪些能力?
  4. 2021年最新抓取微博所有图片,所有视频,所有评论,保存数据库excel
  5. 安卓开发自学教程,Android研发岗必问30+道高级面试题
  6. 山经·南山经:猨翼山 [yuán yì shān]
  7. 林轩田机器学习 | 机器学习技法课程笔记10 --- Random Forest
  8. 2018-07-03 根据Excel后缀名获取WorkBook
  9. 解决Mysql:Incorrect string value: '\xF0\x9F\x8D\x83\xF0\x9F...' for column
  10. 笔记本键盘输入错乱,字母都变成数字了