CREATE [ [GLOBAL | LOCAL] {TEMPORARY | TEMP} ] TABLE table_name
[(column_name [, ...] )]
[ WITH ( storage_parameter=value [, ... ] ) ]
[ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP}]
[TABLESPACE tablespace]
AS query
[DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY]
该
storage_parameter
如下:
APPENDONLY={TRUE|FALSE}
BLOCKSIZE={8192-2097152}
ORIENTATION={COLUMN|ROW}
COMPRESSTYPE={ZLIB|QUICKLZ}
COMPRESSLEVEL={1-9 | 1}
FILLFACTOR={10-100}
OIDS[=TRUE|FALSE]
CREATE TABLE AS
创建一个表并且使用由
SELECT
命令计算所得的数据进行填充。该表列和
SELECT
命令出来的出来的列有相同的名字和数据类型,但是用户可以复写列名通过给出明确的新列名列表。
CREATE TABLE AS
创建一个新表,并且初始计算查询一次来填充新表。该新表不会同步追踪源表查询子序列的变化。
WITH (
storage_parameter=value
)
该
WITH
子句可以用来为表和索引设置存储选项。注意,用户可以在特定的分区或子分区中设置不同的存储参数,通过在分区中指定
WITH
子句。有以下存储选项:
APPENDONLY — 设置到
TRUE
来创建一个表作为追加优化表。如果设定为
FALSE
或者没有声明,则该表将会创建为常规的堆存储表。
BLOCKSIZE — 对表中每个块设置字节大小。该
BLOCKSIZE
必须在 8192 和 2097152 字节之间,为8192的倍数,默认值时32768。
ORIENTATION — 对面向列存储设置
列
,或为面向行存储的设置
行
(默认值)。该选项仅在
APPENDONLY=TRUE
的时候有效。堆存储表只能是面向行的。
COMPRESSTYPE — 设置
ZLIB
(默认值)或者
QUICKLZ
1
来指定使用的压缩类型。QuickLZ使用较少的CPU功率,并且比zlib具有更快的数据压缩和更低的压缩比。相反,zlib在在较低速率下提供更紧凑的压缩比。此选项仅在
APPENDONLY=TRUE
时有效。
注意:
1
QuickLZ
压缩仅在Pivotal Greenplum数据库的商业版本中可用可用。
COMPRESSLEVEL — 对追加优化表的zlib压缩,设置压缩在
1(最快压缩)到 9(最高压缩比)之间。QuickLZ 压缩等级只能设置到1。如果没有声明,则默认是1。该选项仅在
APPENDONLY=TRUE
时才有效。
FILLFACTOR — 更多关于此索引存储参数的信息请参阅
CREATE INDEX
。
OIDS — 设置为
OIDS=FALSE
(默认值),则行没有分配的对象标识符。Greenplum 强烈推荐用户在创建表的时候不要启用OIDS 。在大型表中,如在典型的Greenplum数据库中表,对表行使用OIDs能引起32OID计数器环绕。一旦计数器环绕,OIDs就被认为是不再唯一的,这不仅使它们对用户应用程序无用,而且还可能在Greenplum数据库系统目录表中引起问题。此外,从表中排出OIDs减少了磁盘上存储区表所需的空间,每行4字节,稍微地提升了性能。不允许在面向列的表上使用OIDs。
ON COMMIT
事务块结束时的临时表的行为可以使用
ON COMMIT
来控制。该三个选项如下:
PRESERVE ROWS — 在临时表事务结束时不采取特别行动。这是默认行为。
DELETE ROWS — 临时表中的所有行将在每个事务块结束时删除。本质上,在每次提交时候执行了
TRUNCATE
。
DROP — 在当前事务块结束时将删除临时表。
TABLESPACE
tablespace
创建的新表所在的表空间的名字。如果没有指定,则使用数据库默认的表空间。
用来声明Greenplum数据库表的分布策略。
DISTIBUTED BY
使用在分布键中声明一列或者多列进行哈希分布。对于大多数的均匀数据分布,该分布键应当是表的主键或是唯一列(或列的集合。如果不可能,则用户可以选择
DISTRIBUTED RANDOMLY
,这会将数据随机循环发送到Segment实例。
该Greenplum数据库服务器配置参数
gp_create_table_random_default_distribution
控制默认的表分布策略,如果当用户创建表的时候没有指定
DISTRIBUTED BY
子句。如果没有指定分布策略,则Greenplum 遵循以下规则来创建表
-
如果查询优化器创建表,并且该参数的值是
off
,则该表的分布策略由命令所决定。
-
如果遗传查询优化器创建表,并且该参数的值为
on
,则该表的分布策略是随机的。
-
GPORCA 创建表,则表分布策略是随机的,该参数值没有影响。
该命令功能上和
SELECT INTO
相似,但是该命令更常用因为它相比使用
SELECT INTO
的语法不太可能产生混淆。此外,
CREATE TABLE AS
提供了包含
SELECT INTO
功能在内超集。
CREATE TABLE AS
可以用于从外部表数据源中快速加载数据。参阅
CREATE EXTERNAL TABLE
。
创建一个新表
films_recent
仅由表
films
最近的条目组成:
CREATE TABLE films_recent AS SELECT * FROM films WHERE
date_prod >= '2007-01-01';
创建一个临时表
films_recent
,仅由films表的最近的条目组成,使用预编译(prepared)语句。新表拥有OIDs并在提交时删除:
PREPARE recentfilms(date) AS SELECT * FROM films WHERE
date_prod > $1;
CREATE TEMP TABLE films_recent WITH (OIDS) ON COMMIT DROP AS
EXECUTE recentfilms('2007-01-01');
该标准要求将子查询用括号括起来;在Greenplum数据库中,这些括号是可选的。
该标准定义了
WITH [NO] DATA
子句;这目前并没有由Greenplum数据库实现。Greenplum数据库提供的行为和标准的
WITH DATA
情况是一样的。
WITH NO
DATA
可以通过给查询追加
LIMIT 0
来模拟。
Greenplum数据库处理临时表不同于标准,更多细节参阅
CREATE TABLE
。
该
WITH
子句是Greenplum数据库扩展;
存储参数和
OIDs
都不在标准中。
该Greenplum数据库表空间的概念不是标准的一部分。
该
TABLESPACE
子句是一个扩展。