本文为您介绍迁移 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 租户不支持某些函数或表达式作为分区键。