设置 OceanBase MySQL 类型的表分区策略
示例:在数据源 mysql424 下数据库 test_424 中,对order
表设置创建分区策略和删除分区策略。
信息项 | 示例值 |
项目名称 | odc_4.2.0 |
所属数据源 | mysql424 |
数据库名称 | test_424 |
表名称 | order |
在 SQL 窗口中,编辑 SQL 语句以创建表 order。
CREATE TABLE `order` ( `time` date NOT NULL, `parti_key` int(11), `name` varchar(120) DEFAULT NULL ) partition by range columns(time, parti_key) (partition p2023_01 values less than ('2023-01-01', 20230101), partition p2023_02 values less than ('2023-02-01', 20230201))
在 SQL 开发窗口的 工单 页签中单击 分区计划 > 新建分区计划。
在新建分区计划面板中,单击编辑分区策略。
在 分区策略 面板中,勾选 分区策略 项下的 创建策略,创建分区策略。
设置将要创建的分区数量。
设置将要创建的分区数量。
创建规则。
如上图所示,可以对
order
表中包含的time
和parti_key
分区键设置分区策略。time
:该分区键类型为DATE
,属于时间类型,因此其可以使用 顺序递增 作为分区创建策略。示例中,time
分区键的创建策略是以当前时间(即分区计划任务实际运行时的时间)为基准时间,间隔 1 个月生成若干分区。parti_key
:该分区键类型为INT
,不属于时间类型,只能使用 自定义 作为分区新建策略。假定需要以当前时间为基准,间隔 1 个月生成若干分区。参照原理介绍一节中关于 自定义分区创建策略 的表述,该表达式可以按照如下步骤生成:获取分区生成的基准时间:由于是以当前时间为基准,可以直接使用
now()
函数。定义分区生成的间隔:由于示例中是以 1 个月为间隔,因此在 创建规则 > 细则 > 间隔 中填入 1 作为固定间隔,且在步骤 1 表达式的基础上增加 interval 表达式,生成下一个分区。即
now () + interval ${INTERVAL} month
,其中${INTERVAL}
指代 创建规则 > 细则 > 间隔 中填入的值。生成对应分区键类型的分区表达式:
parti_key
的类型为int
,但步骤 1 中生成的表达式的类型为时间类型,需要将其转换为int
类型。您可以先将其转成数字样式的字符串,再转换为int
类型,即:cast(date_format(now() + interval ${INTERVAL} month, '%Y%m01') as signed)
。其中,
CAST(xxx AS SIGNED)
:将字段转换成整数。DATE_FORMAT()
:将字段转换成日期格式。NOW()
:返回当前日期。INTERVAL ${INTERVAL} MONTH
:按月间隔表达式,${INTERVAL}
为 ODC 定义的时间间隔函数固定用法。'%Y%m01'
:日期格式。
选择命名方式。
如上图所示,选择的命名方式为 前缀+后缀,该命名方式由一个固定字符串前缀和基于时间的可变后缀构成。
固定前缀:该前缀可由用户自由指定。
可变后缀:可选择时间类型的分区键对应的分区上界作为当前分区的命名后缀,另外可选时间的格式化输出格式以及时间的递增间隔。
配置完成后,单击 测试生成 按钮可以查看设置的分区名。
在 删除分区 项下,根据时间间隔设置预创建相应数量的分区,并选择删除后是否重建索引。
单击 分区策略 面板右下角的 预览 SQL 查看根据所设置的分区策略生成的 SQL 语句。
单击 确定,完成设置分区策略。
设置 OceanBase Oracle 类型的表分区策略
示例:在数据源 oboracle_430 下数据库 OBORACLE 中,对order
表设置创建分区策略和删除分区策略。
在 SQL 窗口中,编辑 SQL 语句以创建表 order。
CREATE TABLE "OBORACLE"."order" ( "TIME" DATE NOT NULL ENABLE, "KEY" NUMBER(*,0) NOT NULL ENABLE, "NAME" VARCHAR2(120) DEFAULT NULL ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by range("TIME", "KEY") (partition "p2024_01" values less than (TO_DATE(' 2024-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),20240101), partition "p2024_02" values less than (TO_DATE(' 2024-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),20240201));
在 SQL 开发窗口的 工单 页签中单击 分区计划 > 新建分区计划。
在新建分区计划面板中,单击编辑分区策略。
在 分区策略 面板中,勾选 分区策略 项下的 创建策略,创建分区策略。
设置将要创建的分区数量。
创建规则。
如上图所示,可以对
order
表中包含的TIME
和KEY
分区键设置分区策略。TIME
:该分区键类型为DATE
,属于时间类型,因此其可以使用 顺序递增 作为分区创建策略。示例中,TIME
分区键的创建策略是以当前时间(即分区计划任务实际运行时的时间)为基准时间,间隔 1 个月生成若干分区。KEY
:该分区键类型为NUMBER
,不属于时间类型,只能使用 自定义 作为分区新建策略。假定需要以当前系统时间为基准,间隔 1 个月生成若干分区。参照 原理介绍 一节中关于 自定义分区创建策略 的表述,该表达式可以按照如下步骤生成:获取分区生成的基准时间:由于是以当前系统时间为基准,可以直接使用
sysdate
函数。定义分区生成的间隔:由于示例中是以 1 个月为间隔,因此在 创建规则 > 细则 > 间隔 中填入
NUMTOYMINTERVAL(1, 'MONTH')
作为固定间隔,且在步骤 1 表达式的基础上增加 interval 表达式,生成下一个分区。即SYSDATE + ${INTERVAL}
,其中${INTERVAL}
指代 创建规则 > 细则 > 间隔 中填入的值。生成对应分区键类型的分区表达式:
KEY
的类型为NUMBER
,但步骤 1 中生成的表达式的类型为时间类型,需要将其转换为NUMBER
类型。您可以先将其转成数字样式的字符串,再转换为NUMBER
类型,即:TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMM"01"')
。其中,
TO_CHAR
:将字段转换成字符型。SYSDATE
:返回当前系统时间。YYYYMM"01"
:日期格式。
选择命名方式。
如上图所示,选择的命名方式为 前缀+后缀,该命名方式由一个固定字符串前缀和基于时间的可变后缀构成。
固定前缀:该前缀可由用户自由指定。
可变后缀:可选择时间类型的分区键对应的分区上界作为当前分区的命名后缀,另外可选时间的格式化输出格式以及时间的递增间隔。
配置完成后,单击 测试生成 按钮可以查看设置的分区名。
在 删除分区 项下,根据时间间隔设置预创建相应数量的分区,并选择删除后是否重建索引。
单击 分区策略 面板右下角的 预览 SQL 查看根据所设置的分区策略生成的 SQL 语句。
单击 确定,完成设置分区策略。