第二章 SQL命令参考-CREATE TABLE AS

来源:互联网 发布:require.js 2.3.5 编辑:程序博客网 时间:2024/06/01 20:01

CREATE TABLE AS

从查询的结果定义了一个新的表。

概要

CREATE [ [GLOBAL | LOCAL] {TEMPORARY |TEMP} ] TABLE table_name [,...])]

[WITH ( storage_parameter=value [,...])]

[ON COMMIT{PRESERVE ROWS | DELETE ROWS | DROP}]

[TABLESPACE tablespace]

AS query

[DISTRIBUTEDBY (column,[ ... ])|DISTRIBUTED RANDOMLY]

where storage_parameter is:

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创建一个新表,并只对SELECT计算_次来填充新表。新表不能跟踪查询的源表的后续变化。

parameter

GLOBAL|LOCAL

这些参数只是为了和标准的SQL进行兼容,但对GPDB没任何作用。

TEMPORARY |TEMP

如果指定,则新表被创建为临时表。临时表在会话结束时自动删除,或者可选地在当前事务结束时(请参阅ON COMMIT)。当临时表存在时,当前会话不存在具有相同名称的现有永久表,除非它们使用模式限定名称引用。在临时表上创建的任何索引也将自动临时使用。

table_name

要创建的新表的名称(可选的模式限定)。

column_name

新表中的列的名称。如果未提供列名称,则从查询的输出列名称中获取。如果从EXECUTE命令创建表,则不能指定列名列表。

WITH ( storage_parameter=value )

WITH子句可用于为表或其索引设置存储选项。请注意,您还可以通过在分区规范中声明WITH子句来在特定分区或子分区上设置不同的存储参数。以下存储选项可用:

APPENDONLY —设置为TRUE,以创建append-optimized表。如果FALSE或未声明,表将被创建为常规堆存储表。

BLOCKSIZE —设置为表中每个块的大小(以字节为单位)。 BLOCKSIZE必须介于8192和2097152字节之间,为8192的倍数。默认值为32768。

ORIENTATION — 设置为面向列的存储的列或行(存储)的行(默认)。此选项仅在APPENDONLY = TRUE时有效。堆存储表只能是面向行的。

COMPRESSTYPE —设置为ZLIB(默认值)或QUICKLZ以指定使用的压缩类型。 QuickLZ使用较少的CPU功率,并以比zlib更低的压缩比更快地压缩数据。相反,zlib在较低速度下提供更紧凑的压缩比。此选项仅在APPENDONLY= TRUE时有效。

COMPRESSLEVEL—于append优化表的zlib压缩,设置为1(最快压缩)至9(最高压缩比)之间的值。 QuickLZ压缩级别只能设置为1.如果未声明,则默认值为1.此选项仅在APPENDONLY =TRUE时有效。

FILLFACTOR —有关此索引存储参数的更多信息,请参阅CREATE INDEX。

OIDS —设置为OIDS = FALSE(默认值),以便行没有分配对象标识符。 Greenplum强烈建议您在创建表时不启用OIDS。在大型表格(如典型的GreenplumDatabase系统中的表格)中,对表格行使用OID可能会导致32位OID计数器的环绕。一旦计数器包围,OID就不能被认为是唯一的,这不仅使它们对用户应用程序无用,而且还可能在Greenplum数据库系统目录表中引起问题。此外,从表中排除OID会减少将表在磁盘上存储所需的空间,每行4个字节,稍微提高性能。在面向列的表上不允许使用OIDS。

ON COMMIT

可以用ON COMMIT控制临时表在事务块结尾的行为。这三个选项是:

PRESERVEROWS - 不采取特殊措施在临时表的事务的结束。这是默认的行为。

删除行 - 在临时表中的所有行会在每个事务块的结尾被删除。从本质上讲,在每个提交自动TRUNCATE完成。

DROP - 临时表将在当前事务块的结尾被丢弃。

TABLESPACE tablespace

表空间是要在其中创建新表的表空间的名称。 如果未指定,则使用数据库的默认表空间。

AS query

Aselect orvalues command, or anexecute command that runs a prepared select or values query.

DISTRIBUTED BY(column,[...])

DISTRIBUTEDRANDOMLY

用于声明表的Greenplum数据分配政策。 DISTIBUTED BY使用散列分布声明为分布key的一个或多个列。在大多数情况下,为了使数据分布均匀,分布键应该表或唯一的列(或列集)的主键。如果不可能的,那么你可以选择随机分布将数据循环发送到该段的实例。

•     If the legacy query optimizer createsthe table, and the value of the parameter is off, the table distribution policy isdetermined based on the command.

•     If the legacy query optimizer createsthe table, and the value of the parameter is on, the table distribution policy israndom.

•      If the Pivotal Query Optimizer createsthe table, the table distribution policy is random.

The parametervalue has no affect.

For information about the parameter,see "Server Configuration parameter ." For information about thelegacy query optimizer and the Pivotal Query Optimizer, see "Querying Data"in the Greenplum Database Administrator Guide.

在Greenplum的数据库服务器配置parameter ,如果当你创建一个表分布式BY子句未指定gp_create_table_random_default_distribution控制默认表分配政策。 Greenplum的数据库遵守这些规则,如果未指定分配政策是为了创建一个表。

•如果legacy query optimizer创建表,并且该parameter 的值是关闭的,该表分配策略是基于命令来确定。

•如果遗留查询优化创建表,并且该parameter 的值是ON,表分配策略是随机的。

•如果举足轻重的查询优化器创建表,该表分配政策是随机的。

该parameter 值没有影响。

有关parameter 的信息,请参阅“服务器配置parameter ”。有关遗留查询优化和枢纽查询优化器的信息,请参阅“查询数据”的Greenplum的数据库管理员指南。

Notes

此命令在功能上类似于SELECT INTO,但它是优选的,因为它不太可能与SELECT INTO语法的其他用法混淆。 此外,CREATE TABLEAS提供了SELECT INTO提供的功能的超集。

CREATE TABLE AS可用于从外部表数据源快速加载数据。 请参阅create

EXTERNAL TABLE.

示例

Create a newtable films_recent consisting of only recent entries from the table films:

CREATE TABLEfilms_recent AS SELECT * FROM films WHERE date_prod >= '2007-01-01';

Create a newtemporary table films_recent, consisting of only recent entries from the tablefilms, using a prepared statement. The new table has OIDs and will be droppedat commit:

PREPARErecentfilms(date) AS SELECT * FROM films WHERE date_prod > $1;

CREATE TEMP TABLE films_recent WITH (OIDS) ON COMMIT DROP ASEXECUTE recentfilms('2007-01-01');

兼容性

标准要求周围的子查询子句括号;在Greenplum数据,这些括号是可选的。

•     该标准定义了一个WITH [NO] DATA子句;这不是目前由Greenplum数据引擎来实现。由Greenplum的数据库提供的行为相当于标准的WITH DATA情况。没有数据可以通过附加LIMIT0到查询进行模拟。

•     Greenplum数据与标准不同的方式处理临时表;请参见CREATE TABLE的详细信息。

•     WITH子句是Greenplum的数据库扩展;既不存储parameter ,也没有OID是标准。

•     表空间的Greenplum数据引擎概念不是标准的_部分。该TABLESPACE子句是一个扩展。

相关参考

CREATE EXTERNAL TABLE, CREATE EXTERNAL TABLE, EXECUTE, SELECT, SELECT INTO, VALUES