HGDB分区表的使用与管理

Wesley13
• 阅读 700

目录

文档用途

详细信息

文档用途

了解HGDB分区表的简单使用

详细信息

1.简介
数据库表分区把一个大的物理表分成若干个小的物理表,并使得这些小物理表在逻辑上可以被当成一张表来使用。
一般来讲我们把上述说明中的大的物理表称为父表/主表,小的物理表称为子表/分区表。
主表/父表/Master Table  该表是创建子表的模板。它是一个正常的普通表,但正常情况下它并不储存任何数据。
子表/分区表/Child Table/Partition Table 这些表继承并属于一个主表。子表中存储所有的数据。主表与分区表属于一对多的关系,也就是说,一个主表包含多个分区表,而一个分区表只从属于一个主表。
分区表 KEY的概念是表中一列或多个列组成的列的集合,该集合用于设定分区表的分区规则。所谓分区规则就是为分区表中的每个分区定义不同的约束条件,当向分区表中插入数据时,分区规则就会根据这些约束条件决定向哪个分区中插入。
2.分区表的使用
2.1分类
HGDB可以支持范围分区(range partition)、列表分区(list partition)和哈希分区(hash partition)三种分区创建分区表时,具体使用哪种分区,具体要看建表的使用场景或要设置为KEY的字段属性来决定:
1)范围分区
在范围分区中,分区规则根据 KEY 按照不同的范围映射到不同的分区中,每个分区的范围都是由一个上限值和下限值来决定,这两个值是在创建分区表时定义的。范围分区的KEY可由多个列(最多可由32 个列)组成。值得一提的是,当KEY 由多个列组成时,除了第一列的各分区约束范围之间不能重叠外,其他列的分区范围可以有重叠。范围分区适用于组成KEY是连续的,可以根据需要设定上下限的列。实际上,在分区表的应用中,范围分区是最普遍,最常用的分区类型
2)列表分区
列表分区的 KEY 只能包含一个。在列表分区中,分区规则是由 KEY 的一系列离散值组成。也就是向列表分区插入数据时,只有等于这些离散值时才会执行插入。很明显,当KEY值是非连续的,离散的时候,创建分区表比较适合采用列表分区。
3)哈希分区
哈希分区就是分区规则将分区创建的KEY根据内部的哈希运算结果然后映射到相应的分区中去。具体的映射关系为,插入数据的KEY值在进行哈希运算等算法后会返回一个序号值,然后拿该序号值和创建分区时给分区分配的序号值比较,相等则插入相应的分区。
哈希分区的KEY目前仅支持一个字段。HASH分区适用于无法有效划分分区范围,即不适用于范围分区和列表分区的场景,比如由很长的字符串组成的ID号,并且查询时以ID做为查询条件之一,那么此时就比较合适对其进行哈希分区。哈希分区还有一个用途就是起到对数据进行平均分配到各个分区中的效果,特别是在大数据量且KEY值没有重复的情况下。
4)分区表的系统表
事实上,分区表中的每个分区都是以表对象的形式存在,其表结构是完全继承自分区表的主表。分区表中的分区信息可以从系统表pg_partitioned_table和pg_class查看。系统表pg_partitioned_table用于记录分区表主表信息,具体参照系统表pg_partitioned_table。系统表pg_class用于记录分区表子分区信息,pg_class有字段值relispartition,relpartbound用于标识分区类型。
2.2 分区表创建
1)范围分区:HGDB的分区表在建表语法上,主表和分区是单独创建的。下面的列表分区、哈希分区也是一样。
创建主表语法:
 CREATE TABLE 主表名 ( [{ 列名称 数据_类型} [, ... ] ] ) PARTITION BY RANGE ( [{ 列名称 } [, ...] ] );
范围分区的KEY值可由多个字段组成(最多32个字段)。
创建分区表语法:
CREATE TABLE 分区表名 PARTITION OF 主表 FOR VALUES FROM{ ( 表达式 [, ...] ) | MINVALUE } [, ...] TO { ( 表达式 [, ...] ) | MAXVALUE } [, ...] [ TABLESPACE 表空间名 ];

更多详细信息请登录【瀚高技术支持平台】查看https://support.highgo.com/#/index/docContentHighgo/20731de002465e4c

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Stella981 Stella981
3年前
Hive重写表数据丢失风险记录
若在Hive中执行INSERTOVERWRITE重写同一个表的数据时,有可能会造成数据丢失。如INSERTOVERWRITETABLEtable\_nameSELECT\FROMtable\_name一、新建一张分区表createtabletest_chj_cols(idstr
Wesley13 Wesley13
3年前
MySQL分区表的管理~1
一、如何管理RANGE和LIST分区以该分区表为例!复制代码(https://oscimg.oschina.net/oscnet/33f58549bdff038e3944801cff215e9419a.gif)CREATETABLEmembers(idINT,fnameVARCHA
Wesley13 Wesley13
3年前
oracle查询表数据并重新插入到本表
oracle查询表数据并重新插入到本表CreateTime2018年5月17日10:30:10Author:Marydon1.情景描述查询表中数据SELECTFROMat_aut
Wesley13 Wesley13
3年前
Oracle一张表中实现对一个字段不同值和总值的统计(多个count)
需求:统计WAIT\_ORDER表中的工单总数、未处理工单总数、已完成工单总数、未完成工单总数。表结构:为了举例子方便,WAIT\_ORDER表只有两个字段,分别是ID、STATUS,其中STATUS为工单的状态。1表示未处理,2表示已完成,3表示未完成总数。 SQL:  1.SELECT   2
Wesley13 Wesley13
3年前
ThinkPHP 根据关联数据查询 hasWhere 的使用实例
很多时候,模型关联后需要根据关联的模型做查询。场景:广告表(ad),广告类型表(ad\_type),现在需要筛选出广告类型表中id字段为1且广告表中status为1的列表先看关联的设置部分 publicfunctionadType(){return$thisbelongsTo('A
Wesley13 Wesley13
3年前
Mysql合并表原理
1.概述:合并表是一种早期的、简单的分区实现,和分区表相比有一些不同的限制,并且缺乏优化。分区表严格来说是一个逻辑上的概念,用户无法访问底层的各个分区,对用户来说分区是透明的。但是合并表允许用户单独访问各个子表。分区表和优化器的结合更紧密,这也是未来发展的趋势,而合并表则是一种将要被淘汰的技术,在未来的版本中可能被删除。2.原理:
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这