表组管理命令 
===========================



通过修改表的 `TABLEGROUP` 属性，可以把一个表加入或移出一个表组，或者改变其 `TABLEGROUP` 属性。修改了表的 `TABLEGROUP` 属性以后，RootService 会在后台执行副本的迁移，把属于同一个分组组的副本调度到同一台机器上，并发起命令把这些分区并入一个复制组（Replication Group）中。

创建表组 
-------------------------

创建表组 `grp1` 的示例如下：

```sql
obclient> CREATE TABLEGROUP grp1;
```



移出表组 
-------------

将表 `t1` 移出表组的示例如下：

```sql
obclient> ALTER TABLE t1 SET TABLEGROUP '';
```



迁入表组 
-------------

将表 `t1` 加入表组 `grp1` 的示例如下：

```sql
obclient> ALTER TABLE t1 SET TABLEGROUP grp1;
```



迁移表组 
-------------

将表 `t1`（原先在表组 `grp1` 中） 迁移进表组 `grp2` 的示例如下：

```sql
obclient> ALTER TABLE t1 SET TABLEGROUP grp2;
```



删除表组 
-------------

下述为删除表组语句的语法，但是如果有任何表的 `TABLE GROUP` 属性引用了目标表组，则该表组不允许被删除。

```sql
obclient> DROP TABLEGROUP grp1;
```



修改分区方式 
---------------

对于属于某一个表组的表，不允许使用 `ALTER TABLE` 直接修改该表的分区方式、Locality 和 Primary Zone 属性。必须使用 `ALTER TABLEGROUP` 语句来进行操作。

修改一个表组的分区方式、Locality 和 Primary Zone 属性时，实际上会同时原子地修改属于这个表组中所有表的对应属性。

修改 Locality 
--------------------

将表组 `grp1` 中所有表的 Locality 都修改为 `F@z1,F@z3` 的示例如下：

```sql
obclient> ALTER TABLEGROUP grp1 SET locality = 'F@z1,F@z3';
```



修改 Primary Zone 
------------------------

将表组 `grp1` 中所有表的 Primary Zone 都修改为 `z1,z2` 的示例如下：

```sql
obclient> ALTER TABLEGROUP grp1 SET primary_zone = 'z1,z2';
```



删除分区 
-------------

将表组 `grp1` 中所有表的 `p0` 和 `p1`分区都删除的示例如下，该操作仅支持 Range 分区。

其中，`p0` 和 `p1` 是创建表组时为 Range 分区指定的分区名，而不是每个表上的分区名，系统根据 Range 分割点能够找到每个表对应的分区。

```sql
obclient> ALTER TABLEGROUP grp1 DROP PARTITION (p0,p1);
```



增加分区 
-------------

为表组 `grp1` 中所有表都增加一个 `p4` 分区的示例如下，该操作仅支持 Range 分区。

```sql
obclient> ALTER TABLEGROUP grp1 ADD PARTITION (PARTITION p4 VALUES LESS THAN (200));
```


