表组(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 数据库 V2.x.x 之前创建的表组中。任何时候,将表加入 OceanBase 数据库 V2.x.x 之后创建的表组时,都会进行校验。如检查分区方式、Primary Zone 和 Locality 是否匹配。