CREATE TABLEGROUP 
======================================



描述 
-----------

该语句用来创建表组。
**说明**



只有租户下的管理员权限才可以创建表组。

格式 
-----------

```javascript
CREATE TABLEGROUP [IF NOT EXISTS] tablegroupname [opt_tablegroup_option_list] [opt_tg_partition_option]

opt_tablegroup_option_list:
tablegroup_option [tablegroup_option]

tablegroup_option:
LOCALITY [=] locality_name
| PRIMARY_ZONE [=] primary_zone_name

opt_tg_partition_option:
PARTITION BY 
 KEY COLUMN_NUM [tg_subpartition_option] PARTITIONS INTNUM
| HASH [tg_subpartition_option] PARTITIONS INTNUM
| RANGE [tg_subpartition_option] {PARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| RANGE COLUMNS COLUMN_NUM [tg_subpartition_option] {PARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| LIST [tg_subpartition_option] {PARTITION partition_name VALUES in list_partition_expr, ...}
| LIST COLUMNS COLUMN_NUM [tg_subpartition_option] {PARTITION partition_name VALUES in list_partition_expr, ...}

tg_subpartition_option:
SUBPARTITION BY 
 RANGE SUBPARTITION TEMPLATE {SUBPARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| RANGE COLUMNS COLUMN_NUM SUBPARTITION TEMPLATE {SUBPARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| HASH [SUBPARTITIONS INTNUM]
| KEY COLUMN_NUM [SUBPARTITIONS INTNUM]
| LIST SUBPARTITION TEMPLATE {SUBPARTITION partition_name VALUES in list_partition_expr, ...}
| LIST COLUMNS COLUMN_NUM SUBPARTITION TEMPLATE {SUBPARTITION partition_name VALUES in list_partition_expr, ...}
```



参数解释 
-------------



|           **参数**           |                                                                                                                                                                                                                                                                                                                                 **描述**                                                                                                                                                                                                                                                                                                                                  |
|----------------------------| |
| tablegroupname             | 表组名称，最长64个字符，字符只能有大小写英文字母，数字和下划线，而且必须以字母或下划线开头，并且不能OceanBase的关键字。 如果要创建的表组名称已存在，并且没有指定IF NOT EXISTS，则会出现错误。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| opt_tablegroup_option_list | 表组的分区方式、locality、primary zone必须和组内的表完全一致。 组内的表信息不能独立变更某一项，只可以通过操作表组进行批量操作。 相同的locality：副本类型、个数、位置要完全一致 相同的primary zone：leader位置及其优先级要完全一致 相同的分区方式： * 分区类型相同（例如，都是hash+range分区）。   * 如果是key分区，要求引用的列数相同，且分区个数相同。   * 如果是hash分区，要求分区个数相同。   * 如果是range columns分区，要求引用的列数相同，且分区数相同，且range分割点相同。   * 如果是range分区，且分区数相同，且range分割点相同。   * 对于二级分区，根据分区类型，要求和1）\~4）一致    |
| opt_tg_partition_option    | 表组的分区规则定义，与CREATE TABLE使用同样的分区方式。 表组没有具体的列定义，所以KEY、RANGE COLUMNS、LIST COLUMNS不需要写出具体的列，只需要指定列个数（COLUMN_NUM）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |



示例 
-----------

* 创建名为 myTableGroup1 的表组。




```javascript
OceanBase(admin@test)> CREATE TABLEGROUP myTableGroup1;
Query OK, 0 rows affected (0.07 sec)

OceanBase(admin@test)> create table myt1 (c1 int, c2 int ) tablegroup = myTableGroup1;
Query OK, 0 rows affected (0.28 sec)

OceanBase(admin@test)> create table myt2 (c1 int, c2 int ) tablegroup = myTableGroup1;
Query OK, 0 rows affected (0.26 sec)
```



* 创建 hash 分区的表组 tgh，同时创建 hash 分区的表ttgh，且分区个数相同。




```javascript
OceanBase(admin@test)> create tablegroup tgh locality='F,R{ALL_SERVER}@z1' partition by hash partitions 10;
Query OK, 0 rows affected (0.09 sec)

OceanBase(admin@test)> create table ttgh(c1 int, c2 int) locality='F,R{ALL_SERVER}@z1' partition by hash(c1) partitions 10;
Query OK, 0 rows affected (0.55 sec)

OceanBase(admin@test)> create table ttgh2(c1 int, c2 int) locality='F,R{ALL_SERVER}@z1' partition by hash(c2) partitions 10;
Query OK, 0 rows affected (0.39 sec)
```



