Amazon Redshift
データベース開発者ガイド (API バージョン 2012-12-01)

ALTER TABLE

データベーステーブルまたは Amazon Redshift Spectrum の外部テーブルの定義を変更します。このコマンドは、CREATE TABLE または CREATE EXTERNAL 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 ] }

where table_constraint is:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] )  
| PRIMARY KEY ( column_name [, ... ] ) 
| FOREIGN KEY (column_name [, ... ] )
   REFERENCES  reftable [ ( refcolumn ) ]}

The following options apply only to external tables:

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' } 
| SET FILE FORMAT format |
| SET TABLE PROPERTIES ('property_name'='property_value') 
| PARTITION ( partition_column=partition_value [, ...] ) 
  SET LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' } 
| ADD [IF NOT EXISTS] 
    PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
    [, ... ]
| DROP PARTITION ( partition_column=partition_value [, ...] )  

パラメータ

table_name

変更するテーブルの名前テーブル名のみを指定するか、schema_name.table_name 形式で特定のスキーマを使用します。外部テーブルは、外部スキーマの名前によって修飾される必要があります。また、ALTER TABLE ステートメントを使用してビュー名かビューの所有者を変更する場合、ビュー名を指定することもできます。テーブル名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。有効な名前の詳細については、「名前と識別子」を参照してください。

ADD table_constraint

指定した制約をテーブルに追加する句。有効な table_constraint 値については、「CREATE TABLE」を参照してください。

注記

プライマリキー制約を null が許容された列に追加することはできません。列が元々 NOT NULL 制約で作成された場合、プライマリキー制約を追加できます。

DROP CONSTRAINT constraint_name

テーブルから指名された制約を削除する句。制約を削除するには、制約タイプではなく制約の名前を指定します。テーブルの制約名を表示するには、次のクエリを実行します。

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 ステートメントでは 1 列しか追加できません。

テーブルの分散キー (DISTKEY) またはソートキー (SORTKEY) である列は追加できません。

ALTER TABLE ADD COLUMN コマンドを使用して次のテーブルと列の属性を変更することはできません。

  • UNIQUE

  • PRIMARY KEY

  • REFERENCES (外部キー)

  • IDENTITY

列名の最大長は 127 バイトです。それより長い名前は 127 文字まで切り詰められます。1 つのテーブルで定義できる列の最大数は 1,600 です。

外部テーブルに列を追加する場合、次の制限が適用されます。

  • DEFAULT、ENCODE、NOT NULL または NULL を制約する列がある外部テーブルに列を追加することはできません。

  • AVRO ファイル形式を使用して定義した外部テーブルに列を追加することはできません。

  • 擬似列が有効になっている場合、1 つの外部テーブルで定義できる列の最大数は 1,598 です。擬似列が有効でない場合、1 つのテーブルで定義できる列の最大数は 1,600 です。

詳細については、「CREATE EXTERNAL TABLE」を参照してください。

column_type

追加する列のデータ型。CHAR および VARCHAR の列の場合、最大長を宣言する代わりに MAX キーワードを使用できます。MAX は、最大長を CHAR では 4,096 バイト、VARCHAR では 65,535 バイトに設定します。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 制約が設定された列で null フィールドが見つかった場合、COPY コマンドは default_expr の値を挿入します。

DEFAULT は外部テーブルでサポートされていません。

ENCODE encoding

列の圧縮エンコード。圧縮が選択されていない場合、Amazon Redshift は以下のように自動的に圧縮エンコードを割り当てます。

  • 一時テーブルのすべての列には RAW 圧縮がデフォルトで割り当てられます。

  • ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。

  • BOOLEAN、REAL、または DOUBLE PRECISION データ型として定義されている列には、RAW 圧縮が割り当てられます。

  • 他のすべての列には LZO 圧縮が割り当てられます。

注記

列を圧縮しない場合は、明示的に RAW エンコードを指定します。

次の 圧縮エンコードがサポートされています。

  • BYTEDICT

  • DELTA

  • DELTA32K

  • LZO

  • MOSTLY8

  • MOSTLY16

  • MOSTLY32

  • RAW (非圧縮)

  • RUNLENGTH

  • TEXT255

  • TEXT32K

  • ZSTD

ENCODE は外部テーブルでサポートされていません。

NOT NULL | NULL

NOT NULL は、列に null 値を使用できないことを指定します。NULL はデフォルトであり、列で null 値を使用できることを指定します。

NOT NULL と NULL は外部テーブルでサポートされていません。

DROP [ COLUMN ] column_name

テーブルから削除する列の名前。

テーブルの末尾列は削除できません。テーブルには少なくとも 1 つの列が必要です。

テーブルの分散キー (DISTKEY) またはソートキー (SORTKEY) である列は削除できません。ビュー、プライマリキー、外部キー、UNIQUE 制約などの依存オブジェクトが列にある場合、DROP COLUMN のデフォルト動作は RESTRICT です。

外部テーブルから列を削除する場合は、次の制限が適用されます。

  • 列をパーティションとして使用している場合、外部テーブルから列を削除することはできません。

  • AVRO ファイル形式を使用して定義した外部テーブルから列を削除することはできません。

  • RESTRICT と CASCADE は外部テーブルに無視されます。

詳細については、「CREATE EXTERNAL TABLE」を参照してください。

RESTRICT

RESTRICT を DROP COLUMN とともに使用すると、以下の場合に、ドロップされる列がドロップされません。

  • 定義されたビューがドロップされる列を参照している場合

  • 外部キーが列を参照している場合

  • 列がマルチパートキーに属している場合

RESTRICT を CASCADE と併用することはできません。

RESTRICT と CASCADE は外部テーブルに無視されます。

CASCADE

DROP COLUMN と共に使用すると、指定した列およびその列に依存するすべてのものを削除します。CASCADE を RESTRICT と併用することはできません。

RESTRICT と CASCADE は外部テーブルに無視されます。

以下のオプションは、外部テーブルにのみ適用されます。

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }

データファイルを含む Amazon S3 フォルダ、または Amazon S3 オブジェクトパスのリストを含むマニフェストファイルへのパス。バケットは Amazon Redshift クラスターと同じ AWS リージョンにある必要があります。サポートされている AWS リージョンのリストについては「Amazon Redshift Spectrum に関する考慮事項」を参照してください。マニフェストファイルの使用に関する詳細は、CREATE EXTERNAL TABLE パラメータ リファレンスの LOCATION を参照してください。

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' | 's3://bucket/manifest_file' }

1 つ以上のパーティション列の新しい場所を設定する句。

ADD [ IF NOT EXISTS ] PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' | 's3://bucket/manifest_file' } [, ... ]

1 つ以上のパーティションを追加する句。複数の PARTITION 句を指定するには、単一の ALTER TABLE … ADD ステートメントを使用します。

注記

AWS Glue を使用する場合、単一の ALTER TABLE ステートメントを使用して、最大 100 パーティションまで追加できます。

IF NOT EXISTS 句は、指定されたパーティションが既に存在する場合はコマンドが変更を加えないことを示します。また、コマンドが、エラーで終了するのではなく、パーティションが存在することを示すメッセージを返すことも示します。この句は、ALTER TABLE で既存のパーティションを追加しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

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

指定のパーティションを削除する句。パーティションを削除すると、外部テーブルのメタデータのみが変化します。Amazon S3 のデータは影響を受けません。

このページの内容: