首页 > 其他分享 >openGauss分区使用样例

openGauss分区使用样例

时间:2024-03-14 17:57:32浏览次数:24  
标签:分区 partition 样例 col1 range part values openGauss

openGauss 分区使用样例

概述

openGauss1.1.0 版本开始,分区方式分为三种,分别是 RANGE、HASH 和 LIST,官方文档中对于分区表的使用样例比较少,这里对各种分区使用方式做一下整理,方便以后快速调整使用。

范围分区

VALUES LESS THAN 语法格式

分区策略的分区键最多支持 4 列

分区键支持的数据类型为:SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、CHARACTER VARYING(n)、VARCHAR(n)、CHARACTER(n)、CHAR(n)、CHARACTER、CHAR、TEXT、NVARCHAR2、NAME、TIMESTAMP[§] [WITHOUT TIME ZONE]、TIMESTAMP[§] [WITH TIME ZONE]、DATE。

数字类型

create table part_range_lessthan_int(
id serial primary key,
col1 varchar(8))
partition by range(id)
(
partition p1 values less than(10),
partition p2 values less than(20),
partition p3 values less than(30),
partition p4 values less than(maxvalue)
);

--唯一索引不需要包含分区字段
create unique index on part_range_lessthan_int(col1);

--测试数据
insert into part_range_lessthan_int values(10,'col1');
insert into part_range_lessthan_int values(21,'tuple2');
insert into part_range_lessthan_int values(91,'tuple3');

--查看数据所属分区
postgres=# select * from part_range_lessthan_int partition(p1);
 id | col1
----+------
(0 rows)

postgres=# select * from part_range_lessthan_int partition(p2);
 id | col1
----+------
 10 | col1
(1 row)

postgres=# select * from part_range_lessthan_int partition(p3);
 id |  col1
----+--------
 21 | tuple2
(1 row)

postgres=# select * from part_range_lessthan_int partition(p4);
 id |  col1
----+--------
 91 | tuple3
(1 row)

字符类型

create table part_range_lessthan_char(
id varchar(8) primary key,
col1 varchar(8))
partition by range(id)
(
partition p1 values less than('eabcd123'),
partition p2 values less than('nabcd123'),
partition p3 values less than('tabcd123'),
partition p4 values less than(maxvalue)
);

--测试数据
insert into part_range_lessthan_char values('12345678','col1');
insert into part_range_lessthan_char values('gabc','col1');
insert into part_range_lessthan_char values('z1234567','col1');

--查看数据所属分区
postgres=# select * from part_range_lessthan_char partition(p1);
    id    | col1
----------+------
 12345678 | col1
(1 row)

postgres=# select * from part_range_lessthan_char partition(p2);
  id  | col1
------+------
 gabc | col1
(1 row)

postgres=# select * from part_range_lessthan_char partition(p4);
    id    | col1
----------+------
 z1234567 | col1
(1 row)

时间类型

create table part_range_lessthan_time(
id timestamptz primary key,
col1 varchar(8))
partition by range(id)
(
partition p1 values less than('2021-01-01'),
partition p2 values less than('2021-03-01'),
partition p3 values less than('2021-06-01'),
partition p4 values less than(maxvalue)
);

--测试数据
insert into part_range_lessthan_time values('2020-01-01','tuple1');
insert into part_range_lessthan_time values('2021-02-20 13:14:59.123456','tuple2');
insert into part_range_lessthan_time values(now(),'tuple3');

--查看数据所属分区
postgres=# select * from part_range_lessthan_time partition(p1);
           id           |  col1
------------------------+--------
 2020-01-01 00:00:00+08 | tuple1
(1 row)

postgres=# select * from part_range_lessthan_time partition(p2);
              id               |  col1
-------------------------------+--------
 2021-02-20 13:14:59.123456+08 | tuple2
(1 row)

postgres=# select * from part_range_lessthan_time partition(p3);
              id               |  col1
-------------------------------+--------
 2021-04-01 18:22:17.071359+08 | tuple3
(1 row)

START END 的语法格式

分区策略的分区键仅支持 1 列

分区键支持的数据类型为:SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、TIMESTAMP[§] [WITHOUT TIME ZONE]、TIMESTAMP[§] [WITH TIME ZONE]、DATE。

数字类型

create table part_range_startend_int(
id serial primary key,
col1 varchar(8))
partition by range(id)
(
partition p1 start(1) end(50) every(10),
partition p2 end(80),
partition p3 start(80),
partition p4 start(90) end(100)
);
--测试数据
insert into part_range_startend_int values(1,'tuple1');
insert into part_range_startend_int values(11,'tuple2');
insert into part_range_startend_int values(80,'tuple3');
insert into part_range_startend_int values(100,'tuple4');
--查看数据所在分区
postgres=# select relname,parentid from pg_partition where parentid=16555;
         relname         | parentid
-------------------------+----------
 part_range_startend_int |    16555
 p1_0                    |    16555
 p1_1                    |    16555
 p1_2                    |    16555
 p1_3                    |    16555
 p1_4                    |    16555
 p1_5                    |    16555
 p2                      |    16555
 p3                      |    16555
 p4                      |    16555
(10 rows)

日期类型

与数字类型相似。

间隔分区

分区策略的分区键仅支持 1 列;

分区键支持数据类型为:TIMESTAMP[§] [WITHOUT TIME ZONE]、TIMESTAMP[§] [WITH TIME ZONE]、DATE;

唯一可自动添加分区的方式。

create table part_range_interval(
partid int not null,
col2 date not null,
)partition by range(col2)
interval('1 day')
(
partition part1 values less than ('20210331'),
partition part2 values less than ('20210401')
);

哈希分区

分区策略的分区键仅支持 1 列;

分区键支持的数据类型为:INT1、INT2、INT4、INT8、NUMERIC、VARCHAR(n)、CHAR、BPCHAR、TEXT、NVARCHAR2、TIMESTAMP[§] [WITHOUT TIME ZONE]、TIMESTAMP[§] [WITH TIME ZONE]、DATE;

分区个数不能超过 64;

所有数据类型的 HASH 分区方式都一样。

create table part_hash(
partid int not null,
col2 varchar(16))
partition by hash(partid)
(partition part_hash_1,
partition part_hash_2,
partition part_hash_3,
partition part_hash_4,
partition part_hash_5,
·
·
·
partition part_hash_60,
partition part_hash_61,
partition part_hash_62,
partition part_hash_63,
partition part_hash_64);

列表分区

分区策略的分区键仅支持 1 列;

分区键支持的数据类型为:INT1、INT2、INT4、INT8、NUMERIC、VARCHAR(n)、CHAR、BPCHAR、NVARCHAR2、TIMESTAMP[§] [WITHOUT TIME ZONE]、TIMESTAMP[§] [WITH TIME ZONE]、DATE;

分区个数不能超过 64 个;

对于从句是 VALUES (list_values_clause)的语法格式,list_values_clause 中包含了对应分区存在的键值,推荐每个分区的键值数量不超过 64 个。

create table part_list(
partid int not null,
col2 varchar(16))
partition by list(partid)
(partition part_list_1 values(1,2,3),
partition part_list_2 values(4,5,6),
partition part_list_3 values(7,8,9));

标签:分区,partition,样例,col1,range,part,values,openGauss
From: https://www.cnblogs.com/renxyz/p/18073576

相关文章

  • openGauss行存与列存
    openGauss行存与列存列存表限制列存表不支持数组。列存表的数量建议不超过1000个。列存表的表级约束只支持PARTIALCLUSTERKEY,不支持主外键等表级约束。列存表的字段约束只支持NULL、NOTNULL和DEFAULT常量值。列存表不支持alter命令修改字段约束。列存表支持......
  • openGauss监控之exporter部署
    openGauss监控之exporter部署概述opengauss_exporter是为openGauss数据库量身打造的数据采集工具,配合当前最受欢迎的监控报警框架prometheus+grafana组合实时展示数据库信息,为openGauss数据库的平稳运行保驾护航。opengauss_exporter同openGauss数据库一样是开源......
  • MogDB openGauss 角色切换后sequence为什么不连续
    本文出处:https://www.modb.pro/db/569272背景今天在客户现场做高可用切换测试,为了验证数据库节点角色切换后无数据丢失,我单独创建一张使用了自增sequence的表,通过vip方式访问数据库,并1s插入一条数据。因为数据库本身是通过benchmarksql工具加压的,数据库服务器的CPU使......
  • MogDB openGauss wal日志解析工具 mog_xlogdump
    MogDB/openGausswal日志解析工具mog_xlogdump本文出处:https://www.modb.pro/db/398124概述mog_xlogdump是云和恩墨独立开发的wal日志离线解析工具。熟悉PG的小伙伴应该都使用pg_xlogdump/pg_waldump查看过PG数据库的wal文件,解析的wal数据结果是没有办法直接拿......
  • MogDB-openGauss default privileges 使用方法
    MogDB/openGaussdefaultprivileges使用方法权限是用户访问数据库对象的首要条件,每个新增用户默认属于PUBLIC角色组成员,也就是具有PUBLIC角色组的权限,但在日常业务使用中,仅仅具有PUBLIC权限是远远不够的,还需要具有额外的权限,在MogDB/openGauss数据库支持的业务中经常需......
  • openGauss 由于RemoveIPC未关闭导致数据库crash
    openGauss由于RemoveIPC未关闭导致数据库crashsemop引发的数据库crash--主库FATAL:semop(id=xxxxx)failed:IdentifierremovedFATAL:semctl(xxxxxx,11,SETVAL,0)failed:Invalidargument--备库FATAL:semctl(xxxxxx,11,SETVAL,0)failed:InvalidargumentLOG......
  • MogDB openGauss 自定义snmptrapd告警信息
    MogDB/openGauss自定义snmptrapd告警信息本文出处:https://www.modb.pro/db/232391在之前的文章MogDB/openGauss监控告警配置介绍了如何通过alertmanager模块将报警通过snmp推送出去,但是在实际使用中,默认的报警规则信息并不能很好的满足snmp服务端的需求,需要定制化报警......
  • MogDB openGauss常用查询汇总
    MogDB/openGauss常用查询汇总概述在MogDB/openGauss日常运维过程中,会经常通过SQL来获取想要查看的信息,这些SQL可以作为监控指标、巡检指标,也可以临时查询使用。通过系统线程id查对应的query#!/bin/bashsource~/.bashrcthread_sets=`ps-ef|grep-igaussdb|g......
  • MogDB openGauss故障排查流程
    MogDB/openGauss故障排查流程前提如果有反馈说数据库响应慢或者压测过程中数据库有报错,第一步先收集数据库服务器资源使用情况,这一步是处理所有故障的前提。--负载top命令htop命令--cpulscpu命令--内存大小free-g--磁盘大小df-Th--磁盘使用跟踪nohupiostat......
  • MogDB openGauss数据库扩缩容的几种方式
    MogDB/openGauss数据库扩缩容的几种方式文本出处:https://www.modb.pro/db/453105随着业务的发展,业务系统对数据库的架构要求也在变化,比如需要读负载均衡、机房搬迁、服务器硬件替换等等,这需要在原数据库主备架构的基础上进行扩/缩容操作,目前MogDB数据库安装方式有三种,分别是......