设置 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 个月生成若干分区。参照 3 一节中的表述,该表达式可以按照如下步骤生成:- 获取分区生成的基准时间:由于是以当前时间为基准,可以直接使用 - 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():返回当前日期。说明- 在 ODC 中,还支持通过变量 ${LAST_PARTITION_VALUE} 引入当前数据库的分区上限值,例如 - ${LAST_PARTITION_VALUE} + interval ${INTERVAL} month表示从数据库最新的分区上限值进行后续分区生成。
- 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 个月生成若干分区。参照 3 一节中的表述,该表达式可以按照如下步骤生成:- 获取分区生成的基准时间:由于是以当前系统时间为基准,可以直接使用 - 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 语句。  
- 单击 确定,完成设置分区策略。