表组(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 GROUP
/alter TABLE GROUP add table
语句表迁入到 OceanBase 2.0 之前创建的表组中。 - 任何时候,将表加入 OceanBase 2.0 之后创建的表组时,都会进行校验。如检查分区方式、Primary Zone 和 Locality 是否匹配。