创建分区

本文为您介绍迁移 MySQL 数据库的数据至 OceanBase 数据库 MySQL 租户时,CREATE TABLE DDL 创建分区支持的转换范围。

分区定义

partition_options:
    PARTITION BY
        { [LINEAR] HASH(expr)
        | [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list)
        | RANGE{(expr) | COLUMNS(column_list)}
        | LIST{(expr) | COLUMNS(column_list)} }
    [PARTITIONS num]
    [SUBPARTITION BY
        { [LINEAR] HASH(expr)
        | [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list) }
      [SUBPARTITIONS num]
    ]
    [(partition_definition [, partition_definition] ...)]

partition_definition:
    PARTITION partition_name
        [VALUES
            {LESS THAN {(expr | value_list) | MAXVALUE}
            |
            IN (value_list)}]
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] 'string' ]
        [DATA DIRECTORY [=] 'data_dir']
        [INDEX DIRECTORY [=] 'index_dir']
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]
        [(subpartition_definition [, subpartition_definition] ...)]

subpartition_definition:
    SUBPARTITION logical_name
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] 'string' ]
        [DATA DIRECTORY [=] 'data_dir']
        [INDEX DIRECTORY [=] 'index_dir']
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]

支持的范围

  • 支持创建一级分区:RANGE 分区、 LIST 分区、HASH 分区和 KEY 分区。

  • 支持创建二级分区:HASH 分区和 KEY 分区。

  • RANGE 分区、 LIST 分区、HASH 分区支持函数分区键(分区键为表达式或函数)和列分区键(分区键为字段),KEY 分区仅支持列分区键。

  • 支持指定 PARTITIONS number 和 SUBPARTITIONS number。

不支持的范围

创建分区时,不支持创建 LINEAR HASH 分区和 LINEAR KEY 分区。

重要

如果同步的创建分区的 DDL 包含不支持的定义,则分区定义输出空,但是表结构会保留(分区定义被抛弃)。

忽略的属性

重要

如果同步的创建分区的 DDL 中包含以下属性的定义,则这些属性将不会被解析和转换,最终会被忽略。

  • 分区定义中指定 ENGINE。

  • 分区定义中指定 COMMENT。

  • 分区定义中指定 DATA DIRECTORY。

  • 分区定义中指定 INDEX DIRECTORY。

  • 分区定义中指定 MAX_ROWS。

  • 分区定义中指定 MIN_ROWS。

  • 分区定义中指定 TABLESPACE。

  • 指定 KEY 分区中的 ALGORITHM 算法:

    PARTITION BY KEY ALGORITHM={1 | 2} (column_list) -> PARTITION BY KEY (column_list)

使用限制

重要

由于 OceanBase 数据库 MySQL 租户本身的限制,如果存在以下场景,同步的 DDL 被成功转换后,执行到 OceanBase 数据库 MySQL 租户可能会报错。

  • OceanBase 数据库 MySQL 租户不支持某些字段类型作为分区键。

  • OceanBase 数据库 MySQL 租户不支持某些函数或表达式作为分区键。