4.自定义分区及底层存储合并机制
4.1.自定义分区键
4.2.分区目录的命名规则
4.3.分区目录的合并过程
4.4.分区目录的合并过程
4.5.分区表达式指定
4.6.分区案例

4.自定义分区及底层存储合并机制

4.1.自定义分区键

1.分区是在建表时使用PARTITION BY expr子句指定。
2.分区键可以是表列中的任何表达式。
例如,按月指定分区:PARTITION BY toYYYYMM(date_column)。
使用元组指定分区:PARTITION BY (toMonday(StartDate),EventType)
3.在将新数据插入表中时,每个分区的数据存储为单独的数据片段(每个数据片段的数 据是按主键排序的),在插入后的10-15分钟内,同一个分区的数据片段将合并为一个整 体的数据片段。

4.2.分区目录的命名规则

根据分区表达式的数据类型,分区的命名规则是存在差异的。
1.不指定分区:分区名称为all
2.数值数据类型:分区名称为数值。
3.日期数据类型:将日期转换为数字作为分区名称。
4.字符串数据类型:将日期转换为hash作为分区名称。

系统表:

xxxxx :) SELECT partition,name,table,active FROM system.parts WHERE table like '%demo%';SELECT partition,name,table,active
FROM system.parts
WHERE table LIKE '%demo%'┌─partition─┬─name─────────┬─table─────────────┬─active─┐
│ 201403    │ 201403_1_1_0 │ TabSeparated_demo │      1 │
└───────────┴──────────────┴───────────────────┴────────┘1 rows in set. Elapsed: 0.009 sec. xxxxx :)

4.3.分区目录的合并过程

在将新数据插入表中时,每个分区的数据按照目录存储为单独的数据片段,目录名为数据片段名称,这个和System.parts表的name字段一致。

在插入后的10-15分钟内,同一个分区的数据片段将合并为一个整体的数据片段。

数据片段名称包含了4部分的信息,下面以数据片段20200421_1_2_1为例进行拆解:

  • 20200421是分区名称。
  • 1是数据块的最小编号。
  • 2 是数据块的最大编号。
  • 1 是块级别,即该块在MergeTree中的深度。

4.4.分区目录的合并过程

1.active列为数据片段的状态。1表示激活状态,0表示非激活状态。当源数据片段合并为较大的片段之后,这些源的数据片段就变为了非激活状态。损坏的数据片段也是非激活状态。
2.同一分区有多个独立的数据片段,这表明这些片段尚未合并。
ClickHouse会在插入后大约15分钟后合并数据片段,也可以使用OPTIMIZE语句执行计划外的合并:
OPTIMIZE TABLE mergeTableDemo PARTITION 202004;
3.非激活的片段(active=0片段)将在合并后约10分钟被删除。
4.detached目录包含使用DETACHED语句从表分离的数据片段。损坏的数据片段也将移至该目录,而不是被删除。ClickHouse不会使用detached目录中的数据片段。此目录中的数据可以随时添加、删除或修改,ClickHouse只能在运行ATTACH语句时才会感知该目录。

4.5.分区表达式指定

alter语句、optimize语句通常需要指定分区的表达式,分区表达式的值为system.parts的partition字段, 而不是分区的名称,这里需要注意。

因为字符串和日期类型的分区,分区名称和分区表达式的值是不一样的。

例如:日期类型的分区:

分区表达式的值是2020-04-21,分区名称为20200421。

上面的值可以通过类似如下的方式查询到:

select p.`partition` as `partition`,p.name as name,p.`table` as `table`,p.active as active
from `system`.parts p
where p.`table` = 'test_partition_date'

执行optimize操作:

optimize table test_partition partition '2020-04-21'。

不能写成:

optimize table test_partition partition '20200421。

4.6.分区案例

1.不指定分区

drop table test_partition_non;
create table test_partition_non(name String, timestamp DateTime) ENGINE=MergeTree() order by name;
insert into test_partition_non values ('nanjing', '2020-04-21 12:23:33');

2.分区是数值

drop table test_partition_numeric;
create table test_partition_numeric(id UInt64, timestamp DateTime) ENGINE=MergeTree() order by id partition by id;
insert into test_partition_numeric values (556, '2020-04-21 12:23:33');

3.分区是日期

drop table test_partition_date;
create table test_partition_date(date Date, timestamp DateTime) ENGINE=MergeTree() order by date partition by date;
insert into test_partition_date values ('2020-04-21', '2020-04-21 12:23:33');

4.分区是字符串

drop table test_partition_string;
create table test_partition_string(name String, timestamp DateTime) ENGINE=MergeTree() order by name partition by name;
insert into test_partition_string values ('hangzhou', '2020-04-21 12:23:33');

查看分区信息,可以通过如下方式:

SELECT partition,name,table,active FROM system.parts WHERE table like ‘test_partition_%’;
xxxxx :) SELECT partition, name, table, active FROM system.parts WHERE table like 'test_partition_%';SELECT partition,name,table,active
FROM system.parts
WHERE table LIKE 'test_partition_%'┌─partition─┬─name──────┬─table──────────────────┬─active─┐
│ tuple()   │ all_1_1_0 │ test_partition_date    │      1 │
│ tuple()   │ all_1_1_0 │ test_partition_non     │      1 │
│ 556       │ 556_1_1_0 │ test_partition_numeric │      1 │
└───────────┴───────────┴────────────────────────┴────────┘3 rows in set. Elapsed: 0.010 sec. xxxxx :)

07_clickhouse、自定义分区及底层存储合并机制、自定义分区键、分区目录的命名规则、分区目录的合并过程、分区目录的合并过程、分区表达式指定、分区案例相关推荐

  1. java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...

    大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 转载文章请保留以下声明: 一:存储模式 留言或私信我,邀请你加入"图数据库交流"微信群! 1. ...

  2. janusgraph整合mysql_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构

    527-7.jpg 大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 版本:JanusGraph-0.5.2 转载文章请保留以下声明: 一:存储模式 留言或私信我, ...

  3. 图解图库JanusGraph系列-一文知晓“图数据“底层存储结构(JanusGraph data model)

    图解图库JanusGraph系列-一文知晓"图数据"底层存储结构(JanusGraph data model) 大家好,我是洋仔,JanusGraph图解系列文章,实时更新 图数据 ...

  4. 图解图库Janusgraph系列-一文知晓图数据底层存储结构

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨匠心Java 来源丨匠心Java(code-t ...

  5. Vue | 使用Vue脚手架 【脚手架的基本使用+ref属性+props属性+mixin混入+插件scoped样式+TodoList+浏览器本地存储+组件的自定义事件+全局事件总线+过度与动画】

    文章目录 脚手架的基本使用 初始化脚手架 分析脚手架结构 render函数 修改默认配置 ref属性 props属性 mixin混入 插件 scoped样式 Todo-list案例 组件化编码流程(通 ...

  6. redis底层数据结构(redis底层存储结构、源码分析)

    文章目录 前言 一.redis为什么快? 二.redis的底层数据结构 2.1.redis的底层存储的扩容机制 2.1.1.扩容时间 2.1.2.扩容多大 2.1.3.扩容后的rehash 2.1.4 ...

  7. Binder相关面试总结(六):四大组件底层的通信机制是怎样的

    一.前言 这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔.生怕自己理解上还有偏差,对大家造成误解,贻笑大方.又怕自己理解不够透彻,无法用清晰直白的文字准确的表达出 Binder 的 ...

  8. JDK容器学习之ArrayList:底层存储和动态扩容

    2019独角兽企业重金招聘Python工程师标准>>> ArrayList 底层存储和动态扩容逻辑 ArrayList 作为最常用的容器之一,通常用来存储一系列的数据对象,O(1)级 ...

  9. RocketMQ高性能之底层存储设计

    2019独角兽企业重金招聘Python工程师标准>>> 说在前面 RocketMQ在底层存储上借鉴了Kafka,但是也有它独到的设计,本文主要关注深刻影响着RocketMQ性能的底层 ...

最新文章

  1. Https单向认证和双向认证介绍
  2. 5%精度的电阻值间的倍率,倍数
  3. 【运筹学】线性规划数学模型 ( 单纯形法 | 第二次迭代 | 方程组同解变换 | 生成新单纯形表 | 计算检验数 | 最优解判定 | 线性规划解个数分析 )
  4. docker mysql开机自启动_Docker学习4-学会如何让容器开机自启服务【坑】
  5. 使用Azure DevOps Pipeline实现.Net Core程序的CD
  6. leetcode 21 合并两个有序链表 C++
  7. 扫地机器人开机充电还是关机充电器_新手机是开机充电好,还是关机充电好,老司机告诉你...
  8. UniRx - Unity响应式编程插件
  9. 计算机组成原理—双口RAM和多模块存储器
  10. 解决: Mysql安装时mysqld.exe报`应用程序无法正常启动(0xc000007b)`的问题
  11. Thinkphp 批量更新方法 saveALL
  12. HTC vive追踪定位原理与精度
  13. 微信小程序——微信授权获取手机号弹窗(官方自带)
  14. wap_supplicant介绍
  15. python纸对折8848_GitHub - yly8848/Python-100-Days: Python - 100天从新手到大师
  16. 7kyu Jaden Casing Strings
  17. 专题分纲目录 思维导图 手绘基础篇
  18. 不懂设计的产品不是好开发
  19. 获取硬盘的smart信息
  20. 机器学习 生成_使用机器学习的Midi混搭生成独特的乐谱

热门文章

  1. 内网通 去广告_新高一攻略|让我们一起跟升学e网通名师看看如何学好高中化学...
  2. python2.7安装使用thulac库时遇到的一些问题
  3. Django配置开发环境和生产环境以及配置Jinja2模板引擎
  4. pyqt5讲解3:QComboBox,QSpinBox,QSlider
  5. VTK:正态估计用法实战
  6. boost::test模块带有自定义初始化测试的静态库使用变体
  7. boost::mpl模块实现empty相关的测试程序
  8. boost::mp11::mp_partial_sum相关用法的测试程序
  9. boost::neighbor_bfs_visitor用法的测试程序
  10. boost::container模块实现显式实例表的测试程序