Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

ALTER TABLE

更改数据库表的定义。此命令更新 CREATE TABLE 设置的值和属性。

注意

ALTER TABLE 锁定表以便执行读写操作,直到 ALTER TABLE 操作完成。

语法

ALTER TABLE table_name { ADD table_constraint | DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ] | OWNER TO new_owner | RENAME TO new_name | RENAME COLUMN column_name TO new_name | ADD [ COLUMN ] column_name column_type [ DEFAULT default_expr ] [ ENCODE encoding ] [ NOT NULL | NULL ] | DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] } 其中 table_constraint 为:[ CONSTRAINT constraint_name ] { UNIQUE ( column_name [, ... ] ) | PRIMARY KEY ( column_name [, ... ] ) | FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]} 以下选项仅适用于外部表:SET LOCATION 's3://bucket/folder' | SET FILE FORMAT format | SET TABLE PROPERTIES ('property_name'='property_value') | PARTITION ( partition_column=partition_value [, ...] ) SET LOCATION 's3://bucket/folder' | ADD PARTITION ( partition_column=partition_value [, ...] ) LOCATION 's3://bucket/folder' | DROP PARTITION ( partition_column=partition_value [, ...] ) 

参数

table_name

要修改的表的名称。只指定表的名称,或者通过格式 schema_name.table_name 使用特定架构。外部表必须通过一个外部架构名称进行限定。如果您使用 ALTER TABLE 语句重命名视图或更改其所有者,您还可以指定视图名称。表名称的最大长度为 127 个字节;更长的名称将被截断为 127 个字节。您可以使用 UTF-8 多字节字符,每个字符最多为四个字节。有关有效名称的更多信息,请参阅名称和标识符

ADD table_constraint

用于将指定约束添加到表的子句。有关有效 table_constraint 值的描述,请参阅 CREATE TABLE

注意

您不能将主键约束添加到可为空的列。如果列最初是使用 NOT NULL 约束创建的,您可以添加主键约束。

DROP CONSTRAINT constraint_name

用于从表中删除指定约束的子句。要删除约束,请指定约束名称而不是约束类型。要查看表约束名称,请运行以下查询。

Copy
select constraint_name, constraint_type from information_schema.table_constraints;
RESTRICT

用于仅删除指定约束的子句。RESTRICT 是 DROP CONSTRAINT 的一个选项。RESTRICT 不能与 CASCADE 一起使用。

CASCADE

用于删除指定约束和依赖于该约束的任何内容的子句。CASCADE 是 DROP CONSTRAINT 的选项。CASCADE 不能与 RESTRICT 一起使用。

OWNER TO new_owner

用于将表 (或视图) 的所有者更改为 new_owner 值的子句。

RENAME TO new_name

用于将表 (或视图) 重命名为 new_name 中指定的值的子句。表名称的最大长度为 127 个字符;更长的名称将被截断为 127 个字节。

您不能将永久表重命名为以“#”开头的表。名称以“#”开头的表是临时表。

RENAME COLUMN column_name TO new_name

用于将列重命名为 new_name 中指定的值的子句。列名称的最大长度为 127 个字节;更长的名称将被截断为 127 个字节。有关有效名称的更多信息,请参阅名称和标识符

ADD [ COLUMN ] column_name

用于将具有指定名称的列添加到表的子句。您在每个 ALTER TABLE 语句中只能修改一列。

您无法添加用作表的分配键 (DISTKEY) 或排序键 (SORTKEY) 的列。

您不能使用 ALTER TABLE ADD COLUMN 命令修改以下表和列属性:

  • UNIQUE

  • PRIMARY KEY

  • REFERENCES(外键)

  • IDENTITY

列名称的最大长度为 127 个字节;更长的名称将被截断为 127 个字节。可在单个表中定义的列的最大数目为 1,600。

column_type

要添加的列的数据类型。对于 CHAR 和 VARCHAR 列,您可以使用 MAX 关键字而不是声明最大长度。MAX 将最大长度设置为 4096 字节(对于 CHAR)或 65535 字节(对于 VARCHAR)。Amazon Redshift 支持以下数据类型

  • SMALLINT (INT2)

  • INTEGER (INT, INT4)

  • BIGINT (INT8)

  • DECIMAL (NUMERIC)

  • REAL (FLOAT4)

  • DOUBLE PRECISION (FLOAT8)

  • BOOLEAN (BOOL)

  • CHAR (CHARACTER)

  • VARCHAR (CHARACTER VARYING)

  • DATE

  • TIMESTAMP

DEFAULT default_expr

用于为列分配默认数据值的子句。default_expr 的数据类型必须匹配列的数据类型。DEFAULT 值必须是无变量的表达式。不允许子查询、对当前表中其他列的交叉引用和用户定义的函数。

default_expr 在未为列指定值的任何 INSERT 操作中使用。如果未指定默认值,则列的默认值为 null。

如果 COPY 操作在具有 DEFAULT 值和 NOT NULL 约束的列上遇到空字段,则 COPY 命令将插入 default_expr 值。

ENCODE encoding

列的压缩编码。如果未选择压缩,Amazon Redshift 会自动分配压缩编码,如下所示:

  • 默认情况下,会为临时表中的所有列分配 RAW 压缩。

  • 为定义为排序键的列分配 RAW 压缩。

  • 为定义为 BOOLEAN、REAL 或 DOUBLE PRECISION 数据类型的列分配 RAW 压缩。

  • 为其他列分配 LZO 压缩。

注意

如果您不希望压缩某个列,请显式指定 RAW 编码。

支持以下compression encodings

  • BYTEDICT

  • DELTA

  • DELTA32K

  • LZO

  • MOSTLY8

  • MOSTLY16

  • MOSTLY32

  • RAW (无压缩)

  • RUNLENGTH

  • TEXT255

  • TEXT32K

  • ZSTD

NOT NULL | NULL

NOT NULL 列不允许包含 null 值。NULL(默认值)指定列接受 null 值。

DROP [ COLUMN ] column_name

要从表中删除的列的名称。

您无法删除用作表的分配键 (DISTKEY) 或排序键 (SORTKEY) 的列。如果列具有任何从属对象,例如视图、主键、外键或 UNIQUE 限制,则 DROP COLUMN 的默认行为是 RESTRICT。

RESTRICT

在与 DROP COLUMN 配合使用时,RESTRICT 意味着,如果删除引用该列的已定义视图,或者外键引用了该列,或者该列参与某个多部分键,则不删除该列。RESTRICT 不能与 CASCADE 一起使用。

CASCADE

在与 DROP COLUMN 配合使用时,删除指定的列以及依赖该列的任何内容。CASCADE 不能与 RESTRICT 一起使用。

以下选项仅适用于外部表。

SET LOCATION 's3://bucket/folder'

包含数据文件的 Amazon S3 文件夹的路径,如下所示。

Copy
SET LOCATION 's3://mybucket/custdata'
SET FILE FORMAT format

外部数据文件的文件格式。

有效格式如下所示:

  • AVRO

  • PARQUET

  • RCFILE

  • SEQUENCEFILE

  • TEXTFILE

SET TABLE PROPERTIES ( 'property_name'='property_value')

用于设置外部表的表属性表定义的子句。

注意

表属性区分大小写。

'numRows'='row_count'

用于为表定义设置 numRows 值的属性。要明确更新外部表的统计数据,请设置 numRows 属性来指示表的大小。Amazon Redshift 不分析外部表来生成表统计数据,查询优化程序会使用这些统计数据来生成查询计划。如果没有为外部表设置表统计数据,则 Amazon Redshift 假设外部表是较大的表,本地表是较小的表,以此来生成查询执行计划。

'skip.header.line.count'='line_count'

用于设置在每个源文件开头要跳过的行数的属性。

PARTITION ( partition_column=partition_value [, ...] SET LOCATION 's3://bucket/folder/'

用于为一个或多个分区列设置新位置的子句。

ADD PARTITION ( partition_column=partition_value [, ...] ) LOCATION 's3://bucket/folder'

用于添加分区的子句。一个 ALTER TABLE 语句中只能添加一个分区。

DROP PARTITION (partition_column=partition_value [, ...] )

用于删除指定分区的子句。删除分区只会更改外部表元数据。Amazon S3 上的数据不受影响。

本页内容: