关于表组 
=========================



表组（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 是否匹配。

  



