首批通过分布式安全可靠测评,为关键业务系统打造
CREATE TABLEGROUP
更新时间:2023-07-28 10:45:58
描述
该语句用来创建表组。
表组主要用于创建一组具有相同分布特征的表,具有相同分布特征的表在进行连接操作时,可以在本地进行,避免跨节点的数据请求。
创建表组时,首先要规划好表组的用途。如果是用于普通表的属性,表组就不用分区;如果是用于分区表的属性,表组就要指定分区策略,并且要跟分区表的分区策略保持一致。
语法
CREATE TABLEGROUP [IF NOT EXISTS] tablegroup_name [PARTITION BY opt_tg_partition_option]
opt_tg_partition_option:
KEY column_num PARTITIONS INTNUM
| HASH PARTITIONS INTNUM
| RANGE {PARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| RANGE COLUMNS column_num {PARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
| LIST {PARTITION partition_name VALUES IN list_partition_expr, ...}
| LIST COLUMNS column_num {PARTITION partition_name VALUES IN list_partition_expr, ...}
参数解释
| 参数 | 描述 |
|---|---|
| tablegroup_name | 表组名称,最长 64 个字符,字符只能有大小写英文字母,数字和下划线,而且必须以字母或下划线开头,并且不能使用 OceanBase 数据库的关键字。 如果要创建的表组名称已存在,并且没有指定 IF NOT EXISTS,则会出现错误。 |
| opt_tg_partition_option | 表组的分区规则定义,与 CREATE TABLE 使用同样的分区方式。 表组没有具体的列定义,所以 KEY、RANGE COLUMNS、LIST COLUMNS 不需要写出具体的列,只需要指定列个数(COLUMN_NUM)。 |
示例
创建名为
myTableGroup1的表组。obclient> CREATE TABLEGROUP myTableGroup1; Query OK, 0 rows affected obclient> CREATE TABLE myt1 (c1 int, c2 int ) TABLEGROUP = myTableGroup1; Query OK, 0 rows affected obclient> CREATE TABLE myt2 (c1 int, c2 int ) TABLEGROUP = myTableGroup1; Query OK, 0 rows affected创建
HASH分区的表组tgh,同时创建HASH分区的表,其中ttgh与ttgh2且分区个数相同,ttgh3且分区个数不相同,发生报错。obclient> CREATE TABLEGROUP tgh PARTITION BY HASH PARTITIONS 10; Query OK, 0 rows affected obclient> CREATE TABLE ttgh(c1 INT, c2 INT) TABLEGROUP = tgh PARTITION BY HASH(c1) PARTITIONS 10; Query OK, 0 rows affected obclient> CREATE TABLE ttgh2(c1 INT, c2 INT) TABLEGROUP = tgh PARTITION BY HASH(c1) PARTITIONS 10; Query OK, 0 rows affected obclient> CREATE TABLE ttgh3(c1 INT, c2 INT) TABLEGROUP = tgh PARTITION BY HASH(c1) PARTITIONS 5; ErrorCode = 4179, SQLState = HY000, Details = range partition number not match not allowed创建 Range 分区的表组。
obclient> CREATE TABLEGROUP tblgroup1 PARTITION BY RANGE ( PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200) ); Query OK, 0 rows affected创建 Range Columns 分区的表组。
obclient> CREATE TABLEGROUP tblgroup2 PARTITION BY RANGE COLUMNS 1 ( PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200) ); Query OK, 0 rows affected创建 List 分区的表组。
obclient> CREATE TABLEGROUP tblgroup3 PARTITION BY LIST ( PARTITION p_northwest VALUES IN(100), PARTITION p_southwest VALUES IN(200) ); Query OK, 0 rows affected创建 List Columns 分区的表组。
obclient> CREATE TABLEGROUP tblgroup4 PARTITION BY LIST COLUMNS 1 ( PARTITION p_northwest VALUES IN('OR', 'WA'), PARTITION p_southwest VALUES IN('AZ', 'UT', 'NM') ); Query OK, 0 rows affected创建 Hash 分区的表组。
obclient> CREATE TABLEGROUP tblgroup5 PARTITION BY HASH PARTITIONS 10; Query OK, 0 rows affected创建 Key 分区的表组。
obclient> CREATE TABLEGROUP tblgroup6 PARTITION BY KEY 1 PARTITIONS 10; Query OK, 0 rows affected