表组(Table Group)不是一个的物理对象,它是一个逻辑概念,表示一组表或者表的集合。属于这样一个集合的表需要满足一定的约束,即所有表必须拥有相同的 Locality(副本类型、个数及位置)、相同的 Primary Zone(Leader 位置及其优先级)以及相同的分区方式。

    通过定义表组,您可以控制一组表在物理存储上的临近关系。对于包含分区表的表组,它由若干个分区组(Partition Group) 组成,每一个 Partition Group 包含每个分区表的一个分区。属于同一个 Partition Group 的所有 Partition 系统会通过自动调度使得它们位于同一台 OBServer 服务器上,且这些分区副本的 Leader 也位于一台 OBServer 上。

    表组中所有表的限制说明:

    • 分区类型需相同。

    • 如果是 Key 分区,要求引用的列数相同,且分区个数相同(不要求列名相同)。

    • 如果是 Hash 分区,要求分区个数相同。

    • 如果是 Range Columns 分区,要求引用的列数相同和分区数相同,且 Range 分割点相同(各 value 的规则相同)。

    • 如果是 Range 分区,要求分区数相同,且 Range 分割点相同(各 value 的规则相同)。

    • 对于二级分区,根据分区类型,限制如下:

      • 如果是 Key 分区,要求引用的列数相同,且分区个数相同(不要求列名相同)。

      • 如果是 Hash 分区,要求分区个数相同。

      • 如果是 Range Columns 分区,要求引用的列数相同和分区数相同,且 Range 分割点相同(各 value 的规则相同)。

    • 分区增减只支持 Range 分区的表组。

    • 无法通过 ALTER TABLE SET table groupALTER TABLE GROUP add table 语句表迁入到 OceanBase 数据库 V2.x.x 之前创建的表组中。

    • 任何时候,将表加入 OceanBase 数据库 V2.x.x 之后创建的表组时,都会进行校验。如检查分区方式、Primary Zone 和 Locality 是否匹配。