分区策略使用示例

设置 OceanBase MySQL 类型的表分区策略

示例:在数据源 mysql424 下数据库 test_424 中,对order表设置创建分区策略和删除分区策略。

信息项

示例值

项目名称

odc_4.2.0

所属数据源

mysql424

数据库名称

test_424

表名称

order

  1. 在 SQL 窗口中,编辑 SQL 语句以创建表 order。

    image

    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))
  2. 在 SQL 开发窗口的 工单 页签中单击 分区计划 > 新建分区计划

    image

  3. 新建分区计划面板中,单击image编辑分区策略。

    image

  4. 分区策略 面板中,勾选 分区策略 项下的 创建策略,创建分区策略。

    image

  5. 设置将要创建的分区数量。

  6. 设置将要创建的分区数量。

  7. 创建规则。

    如上图所示,可以对order表中包含的timeparti_key分区键设置分区策略。

    • time:该分区键类型为DATE,属于时间类型,因此其可以使用 顺序递增 作为分区创建策略。示例中,time分区键的创建策略是以当前时间(即分区计划任务实际运行时的时间)为基准时间,间隔 1 个月生成若干分区。

    • parti_key:该分区键类型为INT,不属于时间类型,只能使用 自定义 作为分区新建策略。假定需要以当前时间为基准,间隔 1 个月生成若干分区。参照原理介绍一节中关于 自定义分区创建策略 的表述,该表达式可以按照如下步骤生成:

      1. 获取分区生成的基准时间:由于是以当前时间为基准,可以直接使用now()函数。

      2. 定义分区生成的间隔:由于示例中是以 1 个月为间隔,因此在 创建规则 > 细则 > 间隔 中填入 1 作为固定间隔,且在步骤 1 表达式的基础上增加 interval 表达式,生成下一个分区。即now () + interval ${INTERVAL} month,其中${INTERVAL}指代 创建规则 > 细则 > 间隔 中填入的值。

      3. 生成对应分区键类型的分区表达式: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':日期格式。

  8. 选择命名方式。

    如上图所示,选择的命名方式为 前缀+后缀,该命名方式由一个固定字符串前缀和基于时间的可变后缀构成。

    1. 固定前缀:该前缀可由用户自由指定。

    2. 可变后缀:可选择时间类型的分区键对应的分区上界作为当前分区的命名后缀,另外可选时间的格式化输出格式以及时间的递增间隔。

    3. 配置完成后,单击 测试生成 按钮可以查看设置的分区名。

  9. 删除分区 项下,根据时间间隔设置预创建相应数量的分区,并选择删除后是否重建索引。

  10. 单击 分区策略 面板右下角的 预览 SQL 查看根据所设置的分区策略生成的 SQL 语句。

    image

  11. 单击 确定,完成设置分区策略。

设置 OceanBase Oracle 类型的表分区策略

示例:在数据源 oboracle_430 下数据库 OBORACLE 中,对order表设置创建分区策略和删除分区策略。

  1. 在 SQL 窗口中,编辑 SQL 语句以创建表 order。

    image

    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));
  2. 在 SQL 开发窗口的 工单 页签中单击 分区计划 > 新建分区计划

    image

  3. 新建分区计划面板中,单击image编辑分区策略。

    image

  4. 分区策略 面板中,勾选 分区策略 项下的 创建策略,创建分区策略。

    image

  5. 设置将要创建的分区数量。

  6. 创建规则。

    如上图所示,可以对order表中包含的TIMEKEY分区键设置分区策略。

    • TIME:该分区键类型为DATE,属于时间类型,因此其可以使用 顺序递增 作为分区创建策略。示例中,TIME分区键的创建策略是以当前时间(即分区计划任务实际运行时的时间)为基准时间,间隔 1 个月生成若干分区。

    • KEY:该分区键类型为NUMBER,不属于时间类型,只能使用 自定义 作为分区新建策略。假定需要以当前系统时间为基准,间隔 1 个月生成若干分区。参照 原理介绍 一节中关于 自定义分区创建策略 的表述,该表达式可以按照如下步骤生成:

      1. 获取分区生成的基准时间:由于是以当前系统时间为基准,可以直接使用sysdate函数。

      2. 定义分区生成的间隔:由于示例中是以 1 个月为间隔,因此在 创建规则 > 细则 > 间隔 中填入NUMTOYMINTERVAL(1, 'MONTH')作为固定间隔,且在步骤 1 表达式的基础上增加 interval 表达式,生成下一个分区。即SYSDATE + ${INTERVAL},其中${INTERVAL}指代 创建规则 > 细则 > 间隔 中填入的值。

      3. 生成对应分区键类型的分区表达式:KEY的类型为NUMBER,但步骤 1 中生成的表达式的类型为时间类型,需要将其转换为NUMBER类型。您可以先将其转成数字样式的字符串,再转换为NUMBER类型,即:TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMM"01"')

        其中,

        • TO_CHAR:将字段转换成字符型。

        • SYSDATE:返回当前系统时间。

        • YYYYMM"01":日期格式。

  7. 选择命名方式。

    如上图所示,选择的命名方式为 前缀+后缀,该命名方式由一个固定字符串前缀和基于时间的可变后缀构成。

    1. 固定前缀:该前缀可由用户自由指定。

    2. 可变后缀:可选择时间类型的分区键对应的分区上界作为当前分区的命名后缀,另外可选时间的格式化输出格式以及时间的递增间隔。

    3. 配置完成后,单击 测试生成 按钮可以查看设置的分区名。

  8. 删除分区 项下,根据时间间隔设置预创建相应数量的分区,并选择删除后是否重建索引。

  9. 单击 分区策略 面板右下角的 预览 SQL 查看根据所设置的分区策略生成的 SQL 语句。

    image

  10. 单击 确定,完成设置分区策略。

相关文档