CREATE TABLE
功能说明
CREATE TABLE以用户给定的名字在当前数据库创建一个表。用户必须有创建表的权限。
Ø 语法格式
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [vc_name.][database_name.]table_name (column_definition [ , column_definition], ... [, key_options]) [table_options] [partition_options] column_definition: column_name data_type [NOT NULL | NULL] [DEFAULT default_value] key_options: KEY "index_name" ("column_name") KEY_BLOCK_SIZE=<VALUSE> KEY_DC_SIXE=<dc_value> USIONG HASH GLOBAL table_options: [COMMENT 'comment_value'] partition_options: PARTITION BY { RANGE(expr) | LIST(expr) | LINEAR] HASH(expr) | [LINEAR] KEY(column_list)} [PARTITIONS num] [SUBPARTITION BY { [LINEAR] HASH(expr) | [LINEAR] KEY(column_list) } [SUBPARTITIONS num] ] [(partition_definition [, partition_definition] ...)] partition_definition: PARTITION partition_name [VALUES {LESS THAN {(expr | value_list) | MAXVALUE} | IN (value_list)}] [(subpartition_definition [, subpartition_definition] ...)] subpartition_definition: SUBPARTITION logical_name | ||
参数名称 | 说 明 | |
TEMPORARY | 该参数为可选参数,创建临时表需要使用此关键字。 | |
PARTITION BY | 该参数为可选参数,创建分区表时使用此关键字。分区表的创建请参见“CREATE TABLE PARTITION”小节的内容。 | |
IF NOT EXISTS | 该参数为可选参数,用户可以使用关键字IF NOT EXISTS创建表,如果表已经存在,系统将报告WARNING信息。 | |
vc_name | 该参数为可选参数,指定虚拟集群后,在此虚拟集群下创建数据库和表。如果没有显示指定vc_name参数,创建的数据库隶属于USE VC vc_name后的虚拟集群。 | |
database_name | 该参数为可选参数,指定数据库后,在此数据库下创建表。如果没有显示指定database_name参数,创建的表隶属于USE database_name后的数据库中的表。 | |
table_name | 表命名规则请参见“数据库、表、索引、列和别名”小节。默认情况下,在当前数据库中创建表。如果没有指定当前数据库或表已经存在,则报告错误信息。 | |
column_name | 指定表中的数据列。 | |
data_type | 指定数据列的数据类型。数据类型参见“数据类型”中的内容。 | |
NOT NULL | NULL | 指定数据列的值,是否允许为NULL。如果既没有指定NULL也没有指定NOT NULL,列被视为指定了NULL。 | |
default_value | 指定数据列的默认值。默认值必须是一个常数,而不能是一个函数或者一个表达式。举例来说,用户不能将一个数据列的默认值设置为NOW()或者CURRENT_DATE()之类的函数。对于给定的一个表,可以使用SHOW CREATE TABLE语句来查看哪些列有显式DEFAULT子句。 | |
comment_value | 指定数据列的备注说明。例如:stu_no id COMMENT '学号'。 | |
key_options | 指定表中的hash索引。 | |
index_name | 指定要创建的索引名称 | |
index_column_name | 指定要创建的索引列名 | |
KEY_DC_SIZE=dc_value | 指定HASH索引的分段大小。dc_value最大值为2147483646,最小值为0。默认为0表示在整列上创建HASH索引。 | |
USING HASH GLOBAL | 指定HASH索引为全局索引。 | |
table_options | 默认为随机分布表。 | |
REPLICATED | 使用关键词REPLICATED创建复制表。复制表在GBase 8a MPP Cluster的各个data节点上存放的是完整数据。 | |
DISTRIBUTED BY column_name | 指定创建表中的物理列column_name是哈希列,这样创建的表,称为哈希分布表。哈希列可以是整数类型(INT、BIGINT等)、VARCHAR或者DECIMAL类型 | |
COMMENT | 指定表的备注说明。可以用SHOW CREATE TABLE table_name和SHOW FULL COLUMNS FROM table_name语句来显示备注信息。 | |
COMPRESS | 指定表级的数据压缩属性,包含字符类型的压缩属性值和数值类型的压缩属性值。 |
注意 l 复制表表名尾部不允许是_n{number}结尾,例如mytable_n1,mytable_n12是不允许使用的。 l 执行OGG Kafka数据同步时,需要HASH分布列的值不能为空 |
Ø 示例
Ø 示例1:创建一张普通表。
gbase> CREATE TABLE t1(a int , b varchar(50) NOT NULL DEFAULT 'gbase'); Query OK, 0 rows affected gbase> DESC t1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | YES | | NULL | | | b | varchar(50) | NO | | gbase | | +-------+-------------+------+-----+---------+-------+ 2 rows in set |
Ø 示例2:创建带有列注释信息的表。
gbase> DROP TABLE IF EXISTS t1; Query OK, 0 rows affected gbase> CREATE TABLE t1 (f_username varchar(10) comment 'name' ); Query OK, 0 rows affected gbase> DESC t1; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | f_username | varchar(10) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 1 row in set gbase> SHOW CREATE TABLE t1; +-------+--------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------+ | t1 | CREATE TABLE "t1" ( "f_username" varchar(10) DEFAULT NULL COMMENT 'name' ) | +-------+--------------------------------------------------+ 1 row in set |
CREATE TABLE...AS SELECT...
功能说明
根据列定义以及投影列创建表结构,并且将SELECT中查询的数据复制到所创建的表中。
语法格式
CREATE TABLE [vcname.][dbname.] table_name [(column_definition,...)] [REPLICATED | DISTRIBUTED BY (col_name) ] [AS] SELECT ...; |
表 72 参数说明
参数名称 | 说 明 |
AS | 指定SELECT语句,可选关键字。 |
其他参数说明请参见“CREATE TABLE”小节参数说明部分的内容。
Ø 示例
Ø 示例1:复制全表表结构及数据来创建随机分布表。
gbase> CREATE TABLE t7(a int, b decimal(10,5), c float, d datetime); Query OK, 0 rows affected gbase> INSERT INTO t7 VALUES(1,2.234,3.345,'2019-11-11 11:11:11'), (3,4.567,5.678,'2019-11-11 22:22:22'); Query OK, 2 rows affected Records: 2 Duplicates: 0 Warnings: 0 gbase> CREATE TABLE t8 SELECT * FROM t7; Query OK, 2 rows affected gbase> SELECT * FROM t8; +------+---------+-------+---------------------+ | a | b | c | d | +------+---------+-------+---------------------+ | 1 | 2.23400 | 3.345 | 2019-11-11 11:11:11 | | 3 | 4.56700 | 5.678 | 2019-11-11 22:22:22 | +------+---------+-------+---------------------+ 2 rows in set |
Ø 示例2:按列复制部分表结构及数据创建按指定列分布的哈希分布表。
gbase> CREATE TABLE t9 distributed by('a') SELECT a,b FROM t7; Query OK, 2 rows affected Records: 2 Duplicates: 0 Warnings: 0 gbase> SELECT * FROM t9; +------+------+ | a | b | +------+------+ | 1 | 2 | | 3 | 5 | +------+------+ 2 rows in set |
Ø 示例3:按照条件过滤复制部分表结构及数据创建随机分布表。
gbase> DROP TABLE IF EXISTS t10; Query OK, 0 rows affected gbase> CREATE TABLE t10 SELECT a,b FROM t7 where d>'2019-11-11 11:11:11'; Query OK, 1 row affected Records: 1 Duplicates: 0 Warnings: 0 gbase> SELECT * FROM t10; +------+------+ | a | b | +------+------+ | 3 | 5 | +------+------+ 1 row in set |
Ø 示例4:按照联合查询的结果复制部分表结构及数据创建随机分布表。
gbase> DROP TABLE IF EXISTS t11; Query OK, 0 rows affected gbase> CREATE TABLE t11 SELECT a,b FROM t7 where d>'2019-11-11 11:11:11' UNION ALL SELECT a,b FROM t7 where d='2019-11-11 11:11:11'; Query OK, 2 rows affected Records: 2 Duplicates: 0 Warnings: 0 gbase> SELECT * FROM t11; +------+------+ | a | b | +------+------+ | 3 | 5 | | 1 | 2 | +------+------+ 2 rows in set |
1.1.1.1.1.3 CREATE TABLE...LIKE...
功能说明
复制table_name2的表结构来创建表table_name1。
语法格式
CREATE TABLE [vc_name.][db_name.]table_name1 LIKE table_name2; |
示例
Ø 示例1:创建随机分布表。
gbase> DROP TABLE IF EXISTS t5; Query OK, 0 rows affected gbase> CREATE TABLE t5(a int,b datetime); Query OK, 0 rows affected gbase> INSERT INTO t5 VALUES(1,NOW()); Query OK, 1 row affected gbase> CREATE TABLE t6 LIKE t5; Query OK, 0 rows affected gbase> SHOW CREATE TABLE t6; +-------+---------------------------------------------------------+ | Table | Create Table | +-------+---------------------------------------------------------+ | t6 | CREATE TABLE "t6" ( "a" int(11) DEFAULT NULL, "b" datetime DEFAULT NULL ) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' | +-------+---------------------------------------------------------+ 1 row in set gbase> SELECT * FROM t6; Empty set |
CREATE TEMPORARY TABLE ...
功能说明
在创建一个表时,用户可以使用关键词TEMPORARY。临时表被限制在当前连接中,当连接关闭时,临时表会自动地删除。这就意味着,两个不同的连接可以使用同一个临时表名而不会发生冲突,也不会与现有同名表冲突(现有表将被隐藏,直到临时表被删除)。
语法格式
CREATE TEMPORARY TABLE [IF NOT EXISTS] [vc_name.][db_name.]table_name [(column_definition,...)] [REPLICATED | DISTRIBUTED BY (col_name) ] ; |
注意 l 临时表支持除ALTER之外的所有DDL及DML操作。 l 临时表不能被备份。 l 临时表支持在当前连接中使用查询结果导出语句导出表中数据。 |
Ø
示例
示例1:创建临时表。
gbase> CREATE TEMPORARY TABLE tem_table (a int); Query OK, 0 rows affected gbase> INSERT INTO tem_table (a) values (1); Query OK, 1 row affected gbase> INSERT INTO tem_table (a) values (2); Query OK, 1 row affected gbase> SELECT * FROM tem_table; +------+ | a | +------+ | 1 | | 2 | +------+ 2 rows in set gbase> EXIT; Bye $ gbase -uroot -p Enter password: GBase client 9.5.2.20.117651. Copyright (c) 2004-2020, GBase. All Rights Reserved. gbase> USE test; Query OK, 0 rows affected gbase> SELECT * FROM tem_table; ERROR 1146 (42S02): Table 'test.tem_table' doesn't exist |
CREATE TABLE PARTITION
功能说明
分区表是根据一定规则,将数据库中的一张表分解成多个更小的容易管理的部分,从逻辑上看,只有一张表,但底层却是由多个物理分区组成。
分区表包括普通分区表和子分区表。
目前常用的分区方法有RANGE分区、LIST分区、KEY分区、HASH分区,在分区的管理上目前支持创建分区、添加分区、删除分区。
RANGE分区表和LIST分区表支持子分区,子分区的分区类型可以为[LINEAR] HASH和[LINEAR] KEY。
information_schema.partitions中可以查到所创建的分区表信息。
分区表支持分区列类型:
数值型:INT,BIGINT,SMALLINT,FLOAT。
时间类型(作为分区函数的输入值使用):DATE,DATETIME,TIME。
支持分区函数:
abs() | ceiling() | ceil() | datediff() | day() | dayofmonth() |
dayofweek() | dayofyear() | floor() | hour() | microsecond() | minute() |
mod() | month() | quarter() | second() | time_to_sec() | to_days() |
to_seconds() | weekday() | year() | yearweek() | + | - |
* | / | div | % | extract() | from_days() |
注意 l 包括子分区在内所有分区总和个数不大于8192; l 创建分区表过程中,磁盘空间不足,报错; l 创建分区表过程中,分区名字有重复,报错; l 创建分区表过程中,分区名字不符合命名规范,报错,分区表命名规范与普通表一致; l 不支持每个分区指定不同的tablespace; l 创建分区表时未指定分区名,分区名默认为p0,p1…; l 分区列不支持update操作; l 每个分区的子分区个数必须相同; 只有range分区与list分区可以创建子分区。 |
创建RANGE分区表
语法格式
partition_options: PARTITION BY RANGE(expr) (partition_definition [, partition_definition] ...) [SUBPARTITION BY] { [LINEAR] HASH(expr) | [LINEAR] KEY(column_list) } [SUBPARTITIONS num] partition_definition: PARTITION partition_name VALUES LESS THAN {(expr) | MAXVALUE} [(subpartition_definition [, subpartition_definition] ...)] subpartition_definition: SUBPARTITION logical_name |
说明 l expr是某列值或一个基于某个列值、并返回一个整数值的表达式; l 各分区的expr列表的值必须递增。 |
示例
Ø 示例1:创建RANGE分区表。
gbase> CREATE TABLE t1 ( -> a int(11) DEFAULT NULL, -> b varchar(10) DEFAULT NULL -> ) REPLICATED PARTITION BY RANGE (a) -> (PARTITION p0 VALUES LESS THAN (10) , -> PARTITION p1 VALUES LESS THAN (20) , -> PARTITION p2 VALUES LESS THAN (30) , -> PARTITION p3 VALUES LESS THAN (40) ) ; Query OK, 0 rows affected (Elapsed: 00:00:00.11) |
Ø 示例2:创建RANGE分区表,带hash子分区,不指定子分区名。
gbase> create table t1 (id int, dt date) -> partition by range (id) -> subpartition by hash (quarter(dt)) -> subpartitions 4 -> ( -> partition p0 values less than (1990), -> partition p1 values less than (2000), -> partition p2 values less than maxvalue -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.17) |
Ø 示例3:创建RANGE分区表,带hash子分区,指定子分区名。
gbase> create table t1 (id int, dt date) -> partition by range (id) -> subpartition by hash (quarter(dt)) -> ( -> partition p0 values less than (1990) -> ( -> subpartition part0_一季度, -> subpartition part0_q2, -> subpartition part0_q3, -> subpartition part0_q4 -> ), -> partition p1 values less than (2000) -> ( -> subpartition part1_q1, -> subpartition part1_二季度, -> subpartition part1_q3, -> subpartition part1_q4 -> ), -> partition p2 values less than maxvalue -> ( -> subpartition part2_q1, -> subpartition part2_q2, -> subpartition part2_q3, -> subpartition part2_四季度 -> ) -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.16) |
Ø 示例4:创建RANGE分区表,带key子分区,不指定子分区名。
gbase> create table t1 (id int, dt date) -> partition by range (id) -> subpartition by key (dt) -> subpartitions 4 -> ( -> partition p0 values less than (1990), -> partition p1 values less than (2000), -> partition p2 values less than maxvalue -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.16) |
Ø 示例5:创建RANGE分区表,带key子分区,指定子分区名。
gbase> create table t1 (id int, dt date) -> partition by range (id) -> subpartition by key (dt) -> ( -> partition p0 values less than (1990) -> ( -> subpartition part0_一季度, -> subpartition part0_q2, -> subpartition part0_q3, -> subpartition part0_q4 -> ), -> partition p1 values less than (2000) -> ( -> subpartition part1_q1, -> subpartition part1_二季度, -> subpartition part1_q3, -> subpartition part1_q4 -> ), -> partition p2 values less than maxvalue -> ( -> subpartition part2_q1, -> subpartition part2_q2, -> subpartition part2_q3, -> subpartition part2_四季度 -> ) -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.16) |
创建LIST分区
语法格式
partition_options: PARTITION BY LIST(expr) (partition_definition [, partition_definition] ...) [SUBPARTITION BY] { [LINEAR] HASH(expr) | [LINEAR] KEY(column_list) } [SUBPARTITIONS num] partition_definition: PARTITION partition_name VALUES IN (value_list) [(subpartition_definition [, subpartition_definition] ...)] subpartition_definition: SUBPARTITION logical_name |
说明 l expr是某列值或一个基于某个列值、并返回一个整数值的表达式; l value_list是一个通过逗号分隔的整数列表。 |
示例
Ø 示例1:创建LIST分区表。
gbase> create table t1 (a int, b varchar(10)) -> partition by list(a) ( -> partition p0 values in (3,5,6,9,17), -> partition p1 values in (1,2,10,11,19,20), -> partition p2 values in (4,12,13,14,18), -> partition p3 values in (7,8,15,16) -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.11) |
Ø 示例2:创建LIST分区表,带hash子分区,不指定子分区名。
gbase> create table t1 (a int, b int) -> partition by list(a) -> subpartition by hash (b) -> subpartitions 4 -> ( -> partition p0 values in (3,5,6,9,17), -> partition p1 values in (1,2,10,11,19,20), -> partition p2 values in (4,12,13,14,18) -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.16) |
Ø 示例3:创建LIST分区表,带hash子分区,指定子分区名。
gbase> create table t1 (a int, b int) -> partition by list(a) -> subpartition by hash (b) -> ( -> partition p0 values in (3,5,6,9,17) -> ( -> subpartition part0_q1, -> subpartition part0_q2, -> subpartition part0_q3, -> subpartition part0_q4 -> ), -> partition p1 values in (1,2,10,11,19,20) -> ( -> subpartition part1_q1, -> subpartition part1_q2, -> subpartition part1_q3, -> subpartition part1_q4 -> ), -> partition p2 values in (4,12,13,14,18) -> ( -> subpartition part2_q1, -> subpartition part2_q2, -> subpartition part2_q3, -> subpartition part2_q4 -> ) -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.16) |
Ø 示例4:创建LIST分区表,带key子分区,不指定子分区名。
gbase> create table t1 (a int, b int) -> partition by list(a) -> subpartition by key (b) -> subpartitions 4 -> ( -> partition p0 values in (3,5,6,9,17), -> partition p1 values in (1,2,10,11,19,20), -> partition p2 values in (4,12,13,14,18) -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.16) |
Ø 示例5:创建LIST分区表,带key子分区,指定子分区名。
gbase> create table t1 (a int, b int) -> partition by list(a) -> subpartition by key (b) -> ( -> partition p0 values in (3,5,6,9,17) -> ( -> subpartition part0_q1, -> subpartition part0_q2, -> subpartition part0_q3, -> subpartition part0_q4 -> ), -> partition p1 values in (1,2,10,11,19,20) -> ( -> subpartition part1_q1, -> subpartition part1_q2, -> subpartition part1_q3, -> subpartition part1_q4 -> ), -> partition p2 values in (4,12,13,14,18) -> ( -> subpartition part2_q1, -> subpartition part2_q2, -> subpartition part2_q3, -> subpartition part2_q4 -> ) -> ); Query OK, 0 rows affected (Elapsed: 00:00:00.18) |
创建HASH分区
语法格式
partition_options: PARTITION BY [LINEAR] HASH(expr) [PARTITIONS num] [(partition_definition [, partition_definition] ...)] partition_definition: PARTITION partition_name |
说明 l expr是一个返回一个整数的表达式,也可以是字段类型为整型的物理列的名字; l 创建分区表过程中,num大于8192,报错; l 创建分区表过程中,num等于0,报错。 |
示例
Ø 示例1:创建hash分区表
gbase> create table t1 (a int, b varchar(10)) partition by hash(a); Query OK, 0 rows affected (Elapsed: 00:00:00.09) |
创建KEY分区
Ø 语法格式
partition_options: PARTITION BY [LINEAR] KEY(column_list) [PARTITIONS num] [(partition_definition [, partition_definition] ...)] partition_definition: PARTITION partition_name |
说明 l column_list是只采用一个或多个列名的一个列表; l 创建分区表过程中,num大于8192,报错; l 创建分区表过程中,num等于0,报错。 |
示例
Ø 示例1:创建key分区表
gbase> create table t1 (a int, b varchar(10))partition by key(a); Query OK, 0 rows affected (Elapsed: 00:00:00.08) |
1.1.1.1.1.5.5 创建分区表支持分布、复制属性
示例
Ø 示例1:创建hash分区表
gbase> create table t1 (a int, b varchar(10)) distributed by ('a') partition by key(a); Query OK, 0 rows affected (Elapsed: 00:00:00.09) |
Ø 示例2:创建复制分区表
gbase> create table t2 (a int, b varchar(10))replicated partition by key(a); Query OK, 0 rows affected (Elapsed: 00:00:00.10) |
多列hash表创建
功能说明
CREATE TABLE的时候可以指定多个列作为HASH列。
语法格式
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [vc_name.][database_name.]table_name (column_definition [,column_definition], ... [, key_options]) [table_options] [NOCOPIES]; table_options: [REPLICATED | DISTRIBUTED BY ('column_name’,’column_name1’,...) ] [COMMENT 'comment_value'] |
示例
gbase> create table x0( entry_id int, id2 int, id3 int,id4 int ) distributed by('id3','id4'); Query OK, 0 rows affected (Elapsed: 00:00:00.08) |
1.1.1.1.2 ALTER TABLE
语法格式
ALTER TABLE [vc_name.][database_name.]table_name alter_specification [, alter_specification] ... alter_specification: ADD [COLUMN] column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (column_definition,...) | CHANGE [COLUMN] old_col_name new_col_name column_definition | MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] | RENAME [TO] new_table_name | DROP [COLUMN] col_name |
表 7-3 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项。 |
database_name | 数据库名称,可选项。 |
ADD [COLUMN] (column_definition,...) | 用于增加新的数据列,如果使用FIRST,则新增加的列位于所有数据列的前面;如果使用AFTER,则新增加的列,位于指定数据列的后面。默认不使用FIRST、AFTER,则将新增加的列追加到末尾处。 |
CHANGE [COLUMN] old_col_name new_col_name column_definition | 修改列名称。不支持修改列定义。 |
MODIFY [COLUMN] col_name column_definition FIRST | AFTER col_name | 修改表中存在列的位置。不支持修改列定义。 |
RENAME [TO] new_table_name | 修改表名称为new_table_name。 |
DROP [COLUMN] col_name | 删除表中存在的列。 |
注意 l 目前已经支持的有增加列、删除列、改表名、改列名、改变列的位置; l 不支持的有ORDER BY、改变列的数据类型、改变列的属性(NOT NULL,默认值)、改变表的字符集; l 新增列的限制有: n 对于新增加的列,如果设置了NOT NULL,则需要同时设置默认值,否则报错; n 不允许非EXPRESS引擎的表与EXPRESS表互转。 |
示例
Ø 示例1:增加列:
gbase> DROP TABLE IF EXISTS t; Query OK, 0 rows affected gbase> CREATE TABLE t (a int NOT NULL DEFAULT 1, b varchar(10)); Query OK, 0 rows affected gbase> DESC t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | NO | | 1 | | | b | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set gbase> ALTER TABLE t ADD column c varchar(10) null; Query OK, 0 rows affected Records: 0 Duplicates: 0 Warnings: 0 gbase> DESC t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | NO | | 1 | | | b | varchar(10) | YES | | NULL | | | c | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set |
Ø 示例2:删除列。
gbase> DROP TABLE IF EXISTS t; Query OK, 0 rows affected gbase> CREATE TABLE t (a int NOT NULL DEFAULT 1, b varchar(10)); Query OK, 0 rows affected gbase> DESC t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | NO | | 1 | | | b | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set gbase> ALTER TABLE t DROP column b; Query OK, 0 rows affected Records: 0 Duplicates: 0 Warnings: 0 gbase> DESC t; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | a | int(11) | NO | | 1 | | +-------+---------+------+-----+---------+-------+ 1 row in set |
Ø 示例3:变更表名称。
gbase> SHOW TABLES; +--------------+ | Tables_in_ty | +--------------+ | t | +--------------+ 1 row in set gbase> ALTER TABLE t RENAME ttt2; Query OK, 0 rows affected gbase> SHOW TABLES; +--------------+ | Tables_in_ty | +--------------+ | ttt2 | +--------------+ 1 row in set |
Ø 示例4:变更列名b为新列名d。
gbase> CREATE TABLE t (a int not null,b varchar(10),c varchar(10)); Query OK, 0 rows affected gbase> DESC t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | NO | | NULL | | | b | varchar(10) | YES | | NULL | | | c | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set gbase> ALTER TABLE t CHANGE b d varchar(10); Query OK, 0 rows affected Records: 0 Duplicates: 0 Warnings: 0 gbase> DESC t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | NO | | NULL | | | d | varchar(10) | YES | | NULL | | | c | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set |
Ø 示例5:变更列的位置至最前。
gbase> DROP TABLE IF EXISTS t; Query OK, 0 rows affected gbase> CREATE TABLE t(a int ,b varchar(10),c bool); Query OK, 0 rows affected gbase> DESC t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | YES | | NULL | | | b | varchar(10) | YES | | NULL | | | c | tinyint(1) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set gbase> ALTER TABLE t MODIFY b varchar(10) FIRST; Query OK, 0 rows affected Records: 0 Duplicates: 0 Warnings: 0 gbase> DESC t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | b | varchar(10) | YES | | NULL | | | a | int(11) | YES | | NULL | | | c | tinyint(1) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set |
Ø 示例6:变更某列的位置到指定列的后面。
gbase> ALTER TABLE t MODIFY b varchar(10) AFTER c; Query OK, 0 rows affected Records: 0 Duplicates: 0 Warnings: 0 gbase> DESC t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | a | int(11) | YES | | NULL | | | c | tinyint(1) | YES | | NULL | | | b | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set |
ALTER TABLE... SHRINK SPACE
功能说明
释放被删除的数据文件所占的磁盘空间。
l alter table t shrink space full;
FULL:行级回收,按行级原始顺序对DC内有效数据进行整理,重新落盘写seg文件。只要有删除的数据,删除数据的空间就会被回收。有效行的顺序跟回收前保持一致,效率较低。
l alter table t shrink space full block_reuse_ratio=30;
FULL BLOCK_REUSE_RATIO:块级(DC)回收,DC中有效数据占比大于等于设置值时该DC保留重用,有效数据占比低于该设置值时DC空间进行整合,回收无效数据空间,DC整合后重新落盘写seg文件,无法保证原始顺序。
l alter table t shrink space;
原有语法:seg级回收。seg内所有数据都被删除,则该seg文件空间回收。
语法格式
ALTER TABLE [vc_name.][database_name.]table_name SHRINK SPACE [FULL] | [FULL BLOCK_REUSE_RATIO= num] |
注意 l 索引文件及rowid占用的磁盘空间不会被回收。 l 磁盘空间回收命令仅针对表。 l 包含行存列的表不支持行级回收和块级回收。 l 如果删除数据命中所有数据,则有尾块数据的文件不被清理。 l 磁盘空间回收过程中需要一定的磁盘空间来备份部分元数据文件,在没有可用空间的情况下执行该命令会报错,这时需要手工清理一部分空间(一般需要1G空间)再执行该命令进行空间回收。 |
示例
Ø 示例1:释放被删除的数据文件占有的磁盘空间。
gbase> select count(*) from lineorder; +----------+ | count(*) | +----------+ | 6001215 | +----------+ 1 row in set (Elapsed: 00:00:00.41) [root@rhel73-1 lineorder_n1]# pwd /opt/gnode/userdata/gbase/ssbm/sys_tablespace/lineorder_n1 [root@rhel73-1 lineorder_n1]# ll -h 总用量 69M -rw------- 1 gbase gbase 1.6M 9月 28 11:32 C00000.seg.1 -rw------- 1 gbase gbase 734K 9月 28 11:32 C00001.seg.1 -rw------- 1 gbase gbase 1.6M 9月 28 11:32 C00002.seg.1 -rw------- 1 gbase gbase 5.8M 9月 28 11:32 C00003.seg.1 -rw------- 1 gbase gbase 2.9M 9月 28 11:32 C00004.seg.1 -rw------- 1 gbase gbase 24K 9月 28 11:32 C00005.seg.1 -rw------- 1 gbase gbase 2.8M 9月 28 11:32 C00006.seg.1 -rw------- 1 gbase gbase 31K 9月 28 11:32 C00007.seg.1 -rw------- 1 gbase gbase 1.5M 9月 28 11:32 C00008.seg.1 -rw------- 1 gbase gbase 5.8M 9月 28 11:32 C00009.seg.1 -rw------- 1 gbase gbase 2.4M 9月 28 11:32 C00010.seg.1 -rw------- 1 gbase gbase 1.2M 9月 28 11:32 C00011.seg.1 -rw------- 1 gbase gbase 5.8M 9月 28 11:32 C00012.seg.1 -rw------- 1 gbase gbase 5.3M 9月 28 11:32 C00013.seg.1 -rw------- 1 gbase gbase 1.1M 9月 28 11:32 C00014.seg.1 -rw------- 1 gbase gbase 2.2M 9月 28 11:32 C00015.seg.1 -rw------- 1 gbase gbase 6.0M 9月 28 11:32 C00016.seg.1 gbase> delete from lineorder where lo_orderkey<=5000000; Query OK, 5001154 rows affected (Elapsed: 00:00:02.10) gbase> select count(*) from lineorder; +----------+ | count(*) | +----------+ | 1000061 | +----------+ 1 row in set (Elapsed: 00:00:00.00 gbase> alter table lineorder shrink space full; Query OK, 0 rows affected (Elapsed: 00:00:06.53) [root@rhel73-1 lineorder_n1]# ll -h 总用量 12M -rw------- 1 gbase gbase 274K 9月 28 11:35 C00000.seg.1.B -rw------- 1 gbase gbase 123K 9月 28 11:35 C00001.seg.1.B -rw------- 1 gbase gbase 268K 9月 28 11:35 C00002.seg.1.B -rw------- 1 gbase gbase 978K 9月 28 11:35 C00003.seg.1.B -rw------- 1 gbase gbase 489K 9月 28 11:35 C00004.seg.1.B -rw------- 1 gbase gbase 4.0K 9月 28 11:35 C00005.seg.1.B -rw------- 1 gbase gbase 479K 9月 28 11:35 C00006.seg.1.B -rw------- 1 gbase gbase 5.2K 9月 28 11:35 C00007.seg.1.B -rw------- 1 gbase gbase 245K 9月 28 11:35 C00008.seg.1.B -rw------- 1 gbase gbase 978K 9月 28 11:35 C00009.seg.1.B -rw------- 1 gbase gbase 394K 9月 28 11:35 C00010.seg.1.B -rw------- 1 gbase gbase 199K 9月 28 11:35 C00011.seg.1.B -rw------- 1 gbase gbase 978K 9月 28 11:35 C00012.seg.1.B -rw------- 1 gbase gbase 891K 9月 28 11:35 C00013.seg.1.B -rw------- 1 gbase gbase 186K 9月 28 11:35 C00014.seg.1.B -rw------- 1 gbase gbase 320K 9月 28 11:35 C00015.seg.1.B -rw------- 1 gbase gbase 1021K 9月 28 11:35 C00016.seg.1.B |
ALTER TABLE…ADD PARTITION
语法格式
ALTER TABLE [vc_name.][database_names.]table_name alter_specification [, alter_specification] ... alter_specification: ADD PARTITION partition_definition |
说明 l 分区表的分区条件为RANGE或LIST; l 对于RANGE分区表,新增的分区的VALUE范围相对表中现有分区的VALUE范围必须是递增的; l 对于LIST分区表,新增分区不能包含在现有分区值列表中的任意值; l 分区表不允许添加子分区。 |
示例
gbase> create table pt (i int ,c varchar(10),d date) -> partition by range(i) ( -> partition p0 values less than(10), -> partition p1 values less than(20)); Query OK, 0 rows affected (Elapsed: 00:00:00.13) gbase> -- 增加分区 gbase> alter table pt add partition (partition p2 values less than(30)); Query OK, 0 rows affected (Elapsed: 00:00:00.12) Records: 0 Duplicates: 0 Warnings: 0 gbase> alter table pt add partition (partition p3 values less than(maxvalue)); Query OK, 0 rows affected (Elapsed: 00:00:00.13) Records: 0 Duplicates: 0 Warnings: 0 |
注意 l 添加分区时,分区条件不满足规则,报错; l 添加分区时,分区名字重复,报错; l 添加分区时,分区个数大于8192,报错; l 添加分区时,分区名字不符合命名规范,报错; l 添加分区时,若分区为非RANGE或LIST分区,报错。 |
ALTER TABLE…DROP PARTITION
Ø 语法格式
ALTER TABLE [vc_name.][database_names.]tbl_name alter_specification [, alter_specification] ... alter_specification: DROP PARTITION partition_names |
说明 l 分区表的分区条件为RANGE或LIST; l 不能删除全部分区,确保至少存在1个分区; l 不能删除子分区。 |
Ø 示例
gbase> show create table pt\G *************************** 1. row *************************** Table: pt Create Table: CREATE TABLE "pt" ( "i" int(11) DEFAULT NULL, "c" varchar(10) DEFAULT NULL, "d" date DEFAULT NULL ) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' PARTITION BY RANGE (i) (PARTITION p0 VALUES LESS THAN (10) TABLESPACE = 'sys_tablespace' ENGINE = EXPRESS, PARTITION p1 VALUES LESS THAN (20) TABLESPACE = 'sys_tablespace' ENGINE = EXPRESS, PARTITION p2 VALUES LESS THAN (30) TABLESPACE = 'sys_tablespace' ENGINE = EXPRESS, PARTITION p3 VALUES LESS THAN MAXVALUE TABLESPACE = 'sys_tablespace' ENGINE = EXPRESS) 1 row in set (Elapsed: 00:00:00.00) gbase> alter table pt drop partition p3; Query OK, 0 rows affected (Elapsed: 00:00:00.11) Records: 0 Duplicates: 0 Warnings: 0 gbase> alter table pt drop partition p1; Query OK, 0 rows affected (Elapsed: 00:00:00.12) Records: 0 Duplicates: 0 Warnings: 0 gbase> show create table pt\G *************************** 1. row *************************** Table: pt Create Table: CREATE TABLE "pt" ( "i" int(11) DEFAULT NULL, "c" varchar(10) DEFAULT NULL, "d" date DEFAULT NULL ) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' PARTITION BY RANGE (i) (PARTITION p0 VALUES LESS THAN (10) TABLESPACE = 'sys_tablespace' ENGINE = EXPRESS, PARTITION p2 VALUES LESS THAN (30) TABLESPACE = 'sys_tablespace' ENGINE = EXPRESS) 1 row in set (Elapsed: 00:00:00.01) |
注意 l 删除分区表分区时,若只有1个分区时,报错; l 删除分区表分区时,若同时删除所有分区,报错; l 删除分区表分区时,若是非RANGE或LIST分区,报错。 |
DROP DISTRIBUTED COLUMN
功能说明
删除表定义中的哈希列定义,使得表变为随机分布表。
语法格式
DROP DISTRIBUTED COLUMN ON [vc_name.][database_names.]table_name; |
表 74 参数说明
参数名称 | 说 明 |
vc_name | 所属的vc名称。 |
database_name | 所属数据库名。 |
table_name | 表名 |
示例
gbase> DROP DISTRIBUTED COLUMN ON x0; Query OK, 0 rows affected (Elapsed: 00:00:00.04) |
RENAME TABLE
Ø 功能
RENAME TABLE 的功能就是将一张已经存在的表的名称修改为一个新的表名称。
语法格式
RENAME TABLE [vc_name.][database_name.]old_table_name TO [vc_name.][database_name.]new_table_name; |
表 75 参数说明
参数名称 | 说 明 |
vc_name | 要修改表隶属的vc名称,可选项;省略此参数,即为执行该sql的默认vc。 |
database_name | 是要修改表隶属的数据库名称,可选项;省略此参数,即为USE database_name后的数据库名称。 |
old_table_name | 是表的原有名称。 |
new_table_name | 是表的要修改后的新名称。 |
示例
示例1:更改表n的名称为m
gbase> SELECT table_schema,table_name,table_rows FROM information_schema.tables WHERE table_vc='vcname000001' AND table_schema='test' AND table_name = 'n'; +--------------+------------+------------+ | table_schema | table_name | table_rows | +--------------+------------+------------+ | test | n | 0 | +--------------+------------+------------+ 1 row in set (Elapsed: 00:00:00.00)
gbase> RENAME TABLE vcname000001.test.n to vcname000001.test.m; Query OK, 0 rows affected (Elapsed: 00:00:00.07)
gbase> SELECT table_schema,table_name,table_rows FROM information_schema.tables WHERE table_vc='vcname000001' AND table_schema='test' AND table_name = 'n'; Empty set (Elapsed: 00:00:00.00)
gbase> SELECT table_schema,table_name,table_rows FROM information_schema.tables WHERE table_vc='vcname000001' AND table_schema='test' AND table_name = 'm'; +--------------+------------+------------+ | table_schema | table_name | table_rows | +--------------+------------+------------+ | test | m | 0 | +--------------+------------+------------+ 1 row in set (Elapsed: 00:00:00.00) |
TRUNCATE TABLE
功能说明
TRUNCATE TABLE在功能上与不带WHERE子句的DELETE语句相同,二者均删除表中的全部行。但TRUNCATE TABLE比DELETE速度快,且使用的系统资源和事务日志资源少。
TRUNCATE TABLE属于DDL语法,DELETE FROM table_name属于DML语法。
TRUNCATE TABLE删除表中的所有行,但表结构及其列、约束、索引等保持不变。
语法格式
TRUNCATE TABLE [vc_name.][database_name.]table_name |
表 76 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项; |
database_name | 是要删除表隶属的数据库名称,可选项;省略此参数,即为USE database_name后的数据库名称。 |
table_name | 是要删除其全部行的表的名称。 |
示例
示例1:删除表t中的所有数据。
gbase> USE test; Query OK, 0 rows affected gbase> CREATE TABLE t (a decimal(12,5) DEFAULT NULL, KEY idx_a (a) USING HASH LOCAL); Query OK, 0 rows affected gbase> INSERT INTO t VALUES(1),(2),(3); Query OK, 3 rows affected Records: 3 Duplicates: 0 Warnings: 0 gbase> SELECT * FROM dual; +---------+ | a | +---------+ | 1.00000 | | 2.00000 | | 3.00000 | +---------+ 3 rows in set gbase> TRUNCATE TABLE t; Query OK, 3 rows affected gbase> SELECT * FROM dual; Empty set |
DROP TABLE
Ø 语法格式
DROP [TEMPORARY] TABLE [IF EXISTS] [vc_name.][database_name.]table_name; |
表 77 参数说明
参数名称 | 说 明 |
TEMPORARY | 该参数为可选参数,删除临时表时建议使用此关键字。 |
IF EXISTS | 用户可以使用关键词IF EXISTS防止表不存在时报告错误。当使用IF EXISTS时,对于不存在的表,用户将得到一个WARNING。 |
vc_name | 虚拟集群名称,可选项; |
database_name | 是要删除表隶属的数据库名称,可选项;省略此参数,即为USE database_name后的数据库名称。 |
table_name | 是要删除其全部行的表的名称。 |
注意 使用DROP TABLE移除一个表时,将删除所有的数据和表定义,用户必须有表的DROP权限,所以,一定要小心地使用这个命令! |
TABLE SPACE
GBase 8a MPP Cluster一个表空间表示一个数据存储路径。表空间的创建规则是每个库可以存在多个表空间,只有一个默认表空间,一个表空间可以多个表使用,但一个表只能属于一个表空间。
默认情况下,每个库都有一个默认表空间sys_tablespace,sys_tablespace指向现在的固定数据存储路径($GBASE_BASE/config/gbase_8a_gbase.cnf中datadir指定的目录下数据库名目录下sys_tablespace目录中),不可以删除。
1.1.1.1.3.1 建库时指定默认表空间
语法格式
CREATE DATABASE [vc_name.]<database_name> SYSTEM TABLESPACE DATADIR <path> [SEGSIZE <segsize_value>] [MAXSIZE <max size_value>]; |
表 78 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项。 |
database_name | 数据库名称,可选项。 |
path | 默认Tablespace所对应的系统路径,路径支持相对路径和绝对路径,相对路径是相对于配置文件中配置的datadir路径。 |
segsize_value | 表空间中表的seg文件分裂大小,在10M到2G之间,使用带有K,M,G单位表示,默认为2G。 |
maxsize_value | 指定表空间最大限额,它要大于segsize值,使用带有K,M,G单位表示。由用户保证磁盘可用空间大于maxsize_value。默认为不限制。该参数在集群层指定则表示每个节点的表空间最大限额。资源管理先于表空间进行空间的限额检验。 |
CREATE TABLESPACE
语法格式
CREATE TABLESPACE [IF NOT EXISTS] [[vc_name.]database_name.]<tablespace_name> DATADIR <path> [SEGSIZE <segsize_value>] [MAXSIZE <maxsize_value>] |
表 79 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项。 |
database_name | 数据库名称,可选项。 |
tablespace_name | 表空间名称,支持数字英文和下划线,长度为64个字符,不区分大小写,全部按照小写字符创建,且不允许以数字开头。(该规则适用于全文,类似内容不再冗述); |
path | Tablespace所对应的实际系统路径,路径支持相对路径和绝对路径,相对路径是相对于配置文件中配置的datadir路径; |
segsize_value | Tablespace中表的seg文件分裂大小,在10M到2G之间,使用带有K、M、G单位表示,默认为2G; |
maxsize_value | 指定表空间最大限额,它要大于segsize值,使用带有K,M,G单位表示。由用户保证磁盘可用空间大于maxsize_value。默认为不限制。该参数在集群层指定则表示每个节点的表空间最大限额。资源管理先于表空间进行空间的限额检验。 |
DROP TABLESPACE
语法格式
DROP TABLESPACE [[vc_name.]database_name.]<tablespace_name>; |
表 710 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项。 |
database_name | 数据库名称,可选项。 |
tablespace_name | 表空间名称。 |
注意 删除表空间有如下限制: l l默认表空间不允许删除; l l系统表空间sys_tablespace不允许删除; l l正在使用的表空间不允许删除。 |
ALTER TABLESPACE
功能说明
修改TABLESPACE 最大限额。
语法格式
ALTER TABLESPACE [[vc_name.]database_name.]tablespace_name MAXSIZE <maxsize_value>; |
表 711 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项。 |
database_name | 数据库名称,可选项。 |
tablespace_name | 表空间名称。 |
maxsize_value | 指定表空间最大限额,它要大于segsize值,使用带有K、M、G单位表示。由用户保证磁盘可用空间大于maxsize_value。默认为不限制。只支持增大修改,不允许减少。资源管理先于表空间进行空间的限额检验。 |
建表时指定表空间
功能说明
创建表时可以指定要使用的TABLESPACE,不做指定则使用库的默认表空间。分区表作为一个表来看待,只能指定一个tablespace,不支持为不同分区指定不同tablespace。
语法格式
CREATE TABLE [[vc_name.]database_name.]table_name (column_def...) TABLESPASCE=tablespace_name; |
表 712 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项。 |
database_name | 数据库名称,可选项。 |
table_name | 表名称。 |
tablespace_name | 表空间名称。 |
说明 l CREATE TABLE …LIKE…不支持指定表空间; l CREATE TABLE …AS SELECT…支持指定表空间。 |
设置库的默认表空间
功能说明
用户可以修改指定库的默认Tablespace,设置数据库的默认Tablespace后,创建表不指定Tablespace时,使用默认Tablespace。该功能不支持针对系统库操作,包括gbase、gctmpdb、performance_schema和information_schema等。
语法格式
USE [[vc_name.]database_name.]tablespace_name AS DEFAULT TABLESPACE; |
表 713 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项。 |
database_name | 数据库名称,可选项。 |
tablespace_name | 表空间名称。 |
说明 Ø 使用use前必须保证要设置的tablespace已经创建好。 |
SHOW TABLESPACES
功能说明
查询表空间信息。
语法格式
SHOW [full] TABLESPACES; |
表 714 参数说明
参数名称 | 说 明 |
full | 显示是否是默认表空间。 |
示例
gbase> SHOW FULL TABLESPACES; +------------------------+------------------------+------------+ | Tablespace_in_test_sdy | Tablespace_in_test_sdy | Is_default | +------------------------+------------------------+------------+ | sys_tablespace | . | no | | tbs1 | ../tbs1 | yes | +------------------------+------------------------+------------+ 2 rows in set (Elapsed: 00:00:00.00) |
REFRESH TABLESPACE
功能说明
刷新表空间使用大小信息。
语法格式
REFRESH TABLESPACE [[vc_name.]database_name.] tablespace_nameSTORAGE USAGE |
表 715 参数说明
参数名称 | 说 明 |
vc_name | 虚拟集群名称,可选项。 |
database_name | 数据库名称,可选项。 |
tablespace_name | 表空间名称。 |
注意 l 不支持gctmpdb库、gclusterdb库下,除SHOW TABLESPACES之外的其他TABLESPACE相关操作; l 在建立镜像关系之前,用户需要预先手动在相关节点创建指定的目录和对应的TABLESPACE,且需要用户保证其一致性,镜像关系建立后,支持创建TABLESPACE指令的镜像下发功能; l 卸载时,用户自定义表空间的相关目录中的数据会被删除; l 关于备份恢复工具,其分为三个等级:实例级、库级和表级。其中,实例级和库级的恢复过程,用户不需要手动建立TABLESPACE和对应的目录,这些工作均由程序完成;表级的恢复过程,需要用户预先手动在指定库中建立好与备份时相同的TABLESPACE; l 关于扩容功能,用户需要预先手动在扩容的新节点上将TABLESPACE所需要的目录建立起来,新节点上的创建TABLESPACE的动作由程序自行完成; l 关于分区表,按照一个表来对待,用户只能指定一个TABLESPACE,不支持不同分区指定不同TABLESPACE; l 对于节点替换功能,用户需要在被替换节点上预先手动建立好TABLESPACE的路径。 |